繁体   English   中英

过滤 javascript 中的嵌套对象

[英]filtering nested objects in javascript

我在 javascript 中有以下嵌套对象,我想根据特定条件(值 < 7)进行过滤。 我怎样才能在 JS 中做到这一点?

输入:

const data = [
{key: 'a', value: [{key: 'aa', value: 6}, {key: 'ab', value: 10}]},
{key: 'b', value: [{key: 'ba', value: 3}, {key: 'bb', value: 11}]}
]

预期 output:

const data = [
{key: 'a', value: [{key: 'aa', value: 6}]},
{key: 'b', value: [{key: 'ba', value: 3}]}
]

我已经尝试了一些过滤器,但它没有按预期工作。

谢谢

假设您可以使用箭头函数:

const filteredData = data.map(item => {
  item.value = item.value.filter(subItem => subItem.value < 7);
  return item;
});

如果您在可以使用扩展运算符的环境中工作:

const filteredData = data.map(item => ({
  ...item,
  value: item.value.filter(subItem => subItem.value < 7),
}));

有很多方法,但是例如:

for (const o of data) o.value = o.value.filter(e => e.value < 7);

递归function,不碰原object

const data = [
  {key: 'a', value: [{key: 'aa', value: 6}, {key: 'ab', value: 10}]},
  {key: 'b', value: [{key: 'ba', value: 3}, {key: 'bb', value: 11}]}
];
const filterData = (dataOriginal, minValue) => {
  //INFO: create copy of the object
  const d = JSON.parse(JSON.stringify(dataOriginal));
  //-----
  return d.filter((item,i) => {
    if(typeof item.value === 'number'){
      return item.value < minValue;
    } else if(Array.isArray(item.value)) {
      const f = filterData(item.value, minValue);
      d[i].value = f;
      return !!f.length;
    }
  });
};

const filtered = filterData(data, 7);
console.log(filtered);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM