javascript - 将对象结构减少为仅包含特定属性的值

标签 javascript lodash

假设某事类似于给定的以下对象:

const foo = {
  id: 'foo',
  name: '...',
  test: () => 'fn',
  nestedObject: {
    id: 'nested',
    name: '...',
    nestedObjects: [{
      id: 'bar',
      name: '...',
      anotherNested: {
        id: 'n1',
        name: '...',
        oneMoreNestedObjects: [{
          id: 'n11',
          name: '...',
        }, {
          id: 'n12',
          name: '...',
        }]
      }
    }, {
      id: 'bar2',
      name: '...',
    }]
  }
};

我想通过仅选择名称为 id 的属性或者它是具有 id 属性的对象(数组)来将其转换为对象。所以在我的例子中它将是:

const result = {
  id: 'foo',
  nestedObject: {
    id: 'nested',
    nestedObjects: [{
      id: 'bar',
      anotherNested: {
        id: 'n1',
        oneMoreNestedObjects: [{
          id: 'n11',
        }, {
          id: 'n12',
        }]
      }
    }, {
      id: 'bar2',
    }]
  }
};

顺便说一句:我很喜欢使用 lodash。

最佳答案

您可以对嵌套数组和对象使用迭代和递归方法。

function filter(object) {
    return Object.keys(object).reduce(function (r, k) {
        if (k === 'id') {
            r[k] = object[k];
        } else if (object[k] && typeof object[k] === 'object') {
            r[k] = filter(object[k]);
        }
        return r;
    }, Array.isArray(object) ? [] : {});
}

var foo = { id: 'foo', name: '...', test: () => 'fn', nestedObject: { id: 'nested', name: '...', nestedObjects: [{ id: 'bar', name: '...', anotherNested: { id: 'n1', name: '...', oneMoreNestedObjects: [{ id: 'n11', name: '...', }, { id: 'n12', name: '...', }] } }, { id: 'bar2', name: '...', }] } },
    result = filter(foo);

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

关于javascript - 将对象结构减少为仅包含特定属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43755505/

相关文章:

javascript - 如何更改 Highcharts 中每个气泡的背景颜色?

JavaScript 模板(例如Underscore/Lodash): informative advice

node.js - npm 警告已弃用 xxx : what should I do?

javascript - Lodash:将具有重复值的数组转换为具有重复出现次数的对象

javascript - 修改 webkitdragdrop.js 使用类而不是 ID

javascript - 如何从一系列文本区域(用户输入)中获取平均数?

javascript - JavaScript 中的 "read/write variable"是什么意思?

javascript - 如何从另一个对象中提取对象?

javascript - 是否有更紧凑的方法来映射指定键的值,从结果数组中删除所有未定义的值并从中获取唯一值

javascript - 检测退出全屏 html 视频