【问题标题】:Javascript to filter JSON object if child array contains item如果子数组包含项目,则使用 Javascript 过滤 JSON 对象
【发布时间】:2020-07-24 14:09:22
【问题描述】:

我正在尝试过滤 JSON 对象 orig,如下所示。

orig = [
        {model: 'model1', fields :{target:[1, 2], another_field:"random1"}},
        {model: 'model2', fields :{target:[1, 3, 4], another_field:"random2"}},
        {model: 'model3', fields :{target:[2, 5], another_field:"random3"}}
     ]   

我希望能够使用过滤器target_filter = 1 来检索orig 中目标数组包含1 的每个项目。所以预期的输出是:

filtered = [        
        {model: 'model1', fields :{target:[1, 2], another_field:"random1"}},
        {model: 'model2', fields :{target:[1, 3, 4], another_field:"random2"}},
]

我已经检查了this answer,但如果子数组更深,我不确定如何使它工作。非常感谢您的帮助!

【问题讨论】:

  • const 过滤 = orig.filter(obj => obj.fields.target.includes(1));
  • 谢谢@RezaM。寻求解决方案!

标签: javascript json


【解决方案1】:

您可以找到正确的财产并与Array#includes联系。

var array = [{ model: 'model1', fields: { target: [1, 2], another_field: "random1" } }, { model: 'model2', fields: { target: [1, 3, 4], another_field: "random2" } }, { model: 'model3', fields: { target: [2, 5], another_field: "random3" } }],
    target_filter = 1,
    result = array.filter(({ fields: { target } }) => target.includes(target_filter));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

没有destructuring assignment,你可以使用

array.filter(object => object.fields.target.includes(target_filter))

【讨论】:

  • 如果没有析构,这可能会更容易理解。
猜你喜欢
  • 2021-08-28
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
相关资源
最近更新 更多