【问题标题】:Filter an array of objects upon a value inside an array of objects inside in javascript根据javascript内部对象数组中的值过滤对象数组
【发布时间】:2020-09-15 12:27:11
【问题描述】:

我正在获取一个对象数组,如下所示:

const data =
  [ { id: 0, company: 'nike',   items: [{ id: 0, name: 'caret',        price: 100}] } 
  , { id: 1, company: 'adidas', items: [{ id: 1, name: 'mobile phone', price: 300}] } 
  ] 

我想通过检查 items 数组中的属性“name”的值是否为“Caret”来过滤该对象数组。如果是,我想返回相同的对象数组,其中包含所有内容但已过滤。这意味着,它将过滤掉项目名称不是插入符号的对象。我怎样才能在 javascript 中实现这一点?!

【问题讨论】:

标签: javascript filter


【解决方案1】:

我想你正在寻找那个?

const data =
  [{ id: 0, company: 'nike',   items: [{ id: 0, name: 'caret',        price: 100}]}
  ,{ id: 1, company: 'adidas', items: [{ id: 1, name: 'mobile phone', price: 300}]}
  ] 

const filterName = (arr, name)=>arr.filter(el=>el.items.some(x=>x.name==name))

onlyCaret = filterName(data,'caret')

console.log( onlyCaret[0].company )  // nike
console.log( onlyCaret )   // row 0 with  { ... company: 'nike' ..}
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 我建议在这种情况下使用some 而不是find。如果找到匹配项,some 将返回 truefalsefind 返回找到的元素。
  • @3limin4t0r 正确,array.some() 方法使用起来更智能,感谢您的提示! (我怎么没想到!)
【解决方案2】:

您需要使用 Array.filter 然后循环遍历您的项目以进行匹配

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

const data = [
    {
        id:0,
        company: "nike"
            items:[
                  name: "caret",
                  price:100
            ]
    },
    {
        id:1,
        company: "adidas"
            items:[
                name: "mobile phone",
                price: 300
            ]
    },
    ]

const filteredCompanies = data.filter((company)=>{
    company.items.forEach((item)=>{
        if(item.name === "nike") return true
    })
})

【讨论】:

  • 感谢您的评论。然而,我想返回相同的数组而不过滤目标对象。
  • @Saif 你说的同一个数组是什么意思?
  • 你是指data的数组还是items的数组?
  • 我的意思是数据数组。 @詹姆斯拉什福德
  • 这个答案在 forEach 回调中使用 return true 不起作用,只会从 forEach 回调返回,而不是从 filter 回调返回。
猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2019-05-03
  • 2022-11-27
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多