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.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
属性,因此您需要检查它是否存在。其次,你将它们与 non-existent itemID
而不是 targetItemID
进行比较,最后,@bryan60 提到,如果你在匿名 lambda 中打开一个块,你需要一个明确的 return
语句,虽然说实话,在这种情况下你真的不需要块:
var newArray =
myArray.filter(x => x.item && x.item.id && x.item.id.toString() === targetItemID)
我有一个包含以下对象的数组。
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.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
属性,因此您需要检查它是否存在。其次,你将它们与 non-existent itemID
而不是 targetItemID
进行比较,最后,@bryan60 提到,如果你在匿名 lambda 中打开一个块,你需要一个明确的 return
语句,虽然说实话,在这种情况下你真的不需要块:
var newArray =
myArray.filter(x => x.item && x.item.id && x.item.id.toString() === targetItemID)