问题描述
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.id
与targetItemID
而不是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();