javascript array.filter() 中的字符串比较问题

javascript string comparison issue in array.filter()

我有一个包含以下对象的数组。

myArray = [
    { item: { id: 111557 } },
    { item2: { id: 500600 } }]

我有一个变量

targetItemID = '111557'

注意1个是字符串,数组中的是数字。我正在尝试获取具有正确项目 ID 的对象。

这是我试过的,

    myArray = [
        { item: { id: 111557 } },
        { item2: { id: 500600 } }]


    
    targetItemID = '111557'
    
var newArray = myArray.filter(x => {

    console.log(x.item.id.toString())
    console.log(targetItemID.toString())

    x.item.id.toString() === itemID.toString()

    })

    console.log(newArray);

我希望所有匹配的对象都添加到 'newArray'。我试着在比较之前检查值,它们都是字符串,它们看起来完全一样,但我的 newArray 仍然是空的。

您需要 return 过滤器才能工作:

return x.item.id.toString() === itemID.toString();
  • 您的第二个对象没有 item 属性 而应该。
  • 您的 filter 函数中需要一个 return
  • 您必须将 x.item.idtargetItemID 进行比较,而不是 itemID。由于您使用的是 console.log(),因此您会看到 itemID id not defined ;).
  • 的错误

myArray = [
        { item: { id: 111557 } },
        { item: { id: 500600 } }
];


targetItemID = '111557'
    
var newArray = myArray.filter(x => {

    //console.log(x.item.id.toString())
    //console.log(targetItemID.toString())

    return x.item.id.toString() === targetItemID.toString();
});

console.log(newArray);

这里有一些问题。首先,并非所有对象都有 item 属性,因此您需要检查它是否存在。其次,你将它们与 non-existent itemID 而不是 targetItemID 进行比较,最后,@bryan60 提到,如果你在匿名 lambda 中打开一个块,你需要一个明确的 return 语句,虽然说实话,在这种情况下你真的不需要块:

var newArray =
    myArray.filter(x => x.item && x.item.id && x.item.id.toString() === targetItemID)