array.filter

问题描述

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

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

我有一个变量

targetItemID = '111557'

请注意,一个是字符串,数组中的一个是数字。我正在尝试获取具有正确商品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仍然为空。

解决方法

  • 您的第二个对象没有item属性,应该具有。
  • 您的return函数中需要一个filter
  • 您必须将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属性,因此您需要检查它是否存在。其次,您将它们与不存在的itemID而不是targetItemID进行比较,最后,提到@ bryan60,如果您在匿名Lambda中打开一个块,则需要显式{{1 }}语句,不过,老实说,在这种情况下,您实际上不需要该块:

return
,

您需要返回过滤器才能工作:

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