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

array.filter()中的javascript字符串比较问题,javascript,arrays,filtering,string-comparison,Javascript,Arrays,Filtering,String Comparison,我有一个数组,其中包含以下对象 myArray = [ { item: { id: 111557 } }, { item2: { id: 500600 } }] 我有一个变量 targetItemID = '111557' 请注意,一个是字符串,数组中的是数字。我正在尝试获取具有正确项目id的对象 这是我尝试过的 myArray=[ {项目:{id:111557}}, {item2:{id:500600}}] targetItemID='111557' var newArr

我有一个数组,其中包含以下对象

myArray = [
    { item: { id: 111557 } },
    { item2: { id: 500600 } }]
我有一个变量

targetItemID = '111557'
请注意,一个是字符串,数组中的是数字。我正在尝试获取具有正确项目id的对象

这是我尝试过的

myArray=[
{项目:{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()
})

log(newArray)您需要返回以使筛选器正常工作:

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

您需要返回以使筛选器正常工作:

return x.item.id.toString() === itemID.toString();
  • 您的第二个对象没有
    属性,应该是
  • 过滤器
    函数中需要一个
    返回
    `
  • 您必须将
    x.item.id
    targetItemID
    进行比较,而不是
    itemID
    。由于您使用的是
    console.log()
    ,您可能会看到
    itemID id未定义的错误(
    ;)
myArray=[
{项目:{id:111557}},
{项目:{id:500600}
];
targetItemID='111557'
var newArray=myArray.filter(x=>{
//console.log(x.item.id.toString())
//console.log(targetItemID.toString())
返回x.item.id.toString()==targetItemID.toString();
});
log(newArray)
  • 您的第二个对象没有
    属性,应该是
  • 过滤器
    函数中需要一个
    返回
    `
  • 您必须将
    x.item.id
    targetItemID
    进行比较,而不是
    itemID
    。由于您使用的是
    console.log()
    ,您可能会看到
    itemID id未定义的错误(
    ;)
myArray=[
{项目:{id:111557}},
{项目:{id:500600}
];
targetItemID='111557'
var newArray=myArray.filter(x=>{
//console.log(x.item.id.toString())
//console.log(targetItemID.toString())
返回x.item.id.toString()==targetItemID.toString();
});

log(newArray)这里有一些问题。首先,并非所有对象都有
属性,因此需要检查它是否存在。第二,将它们与不存在的
itemID
进行比较,而不是
targetItemID
,最后,@bryan60提到,如果在匿名lambda中打开一个块,则需要显式的
return
语句,不过,老实说,在这种情况下确实不需要该块:

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

这里有几个问题。首先,并非所有对象都有
属性,因此需要检查它是否存在。第二,将它们与不存在的
itemID
进行比较,而不是
targetItemID
,最后,@bryan60提到,如果在匿名lambda中打开一个块,则需要显式的
return
语句,不过,老实说,在这种情况下确实不需要该块:

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

哦,谢谢,很好的回答:)我会在9分钟内记下正确的答案。不仅仅是这个。看看我的答案。@ScottMarcus我不知道我怎么没有先看到你的答案:)谢谢,我会记下你的答案。@ScottMarcus true没有仔细阅读/假设他们是打字错误。谢谢,好的回答:)我会在9分钟内记下正确答案。这不仅仅是这个。请看我的答案。@ScottMarcus我不知道我怎么没有先看到你的答案:)谢谢,我会为你的答案打分。@ScottMarcus true没有仔细阅读/假设他们有错。他需要返回条件哦,是的,这是一个错别字。return关键字是我的问题,已经解决了,thanks@neiloth请把所有的答案都投票出来,并把这个标记为“答案”。是的,他需要退回条件。哦,是的,那是一个错字。return关键字是我的问题,已经解决了,thanks@neiloth请把所有的答案都投上来,并把这一个标记为“答案”。