首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要以下对象数组中具有最后一个索引的唯一对象

我需要以下对象数组中具有最后一个索引的唯一对象
EN

Stack Overflow用户
提问于 2020-12-24 20:19:58
回答 1查看 40关注 0票数 0
代码语言:javascript
复制
[{
    "Screen Size": [{
        "name": "15 inch - 15.9 inch",
        "filter": "200067-200324",
        "isChecked": true
    }]
}, {
    "Type": [{
        "name": "Ultrabook",
        "filter": "200060-200289",
        "isChecked": true,
   
    }, {
        "name": "Notebook",
        "filter": "200060-200290",
        "isChecked": true,
     
    }]
}, {
    "Type": [{
        "name": "Laptop",
        "filter": "200060-200288",
        "isChecked": true,
     
    }, {
        "name": "Ultrabook",
        "filter": "200060-200289",
        "isChecked": true,

    }, {
        "name": "Notebook",
        "filter": "200060-200290",
        "isChecked": true,
 
    }]
}, {
    "Brand": [{
        "name": "HP",
        "filter": "200140-200886",
        "isChecked": true,
    
    }, {
        "name": "Lenovo",
        "filter": "200140-200887",
        "isChecked": true,

    }]
}, {
    "Brand": [{
        "name": "HP",
        "filter": "200140-200886",
        "isChecked": true,

    }, {
        "name": "Lenovo",
        "filter": "200140-200887",
        "isChecked": true,
    }, {
        "name": "Dell",
        "filter": "200140-200888",
        "isChecked": true,

    }]
}]

从上面的对象数组中,我想过滤唯一键,即索引号最大的键。

例如,在品牌中,我想要最后一个,因为它会有一个更高的指数。

我将合并对象的这些数组,因此我只得到一个包含其内部对象的数组

预期输出

代码语言:javascript
复制
[{
    "name": "15 inch - 15.9 inch",
    "filter": "200067-200324",
    "isChecked": true
}, {
    "name": "Notebook",
    "filter": "200060-200290",
    "isChecked": true,
}, {
    "name": "Dell",
    "filter": "200140-200888",
    "isChecked": true,
}]
EN

回答 1

Stack Overflow用户

发布于 2020-12-24 20:48:36

您可以通过一个reduce()调用来实现这一点,获取第一个(only?)属性在累加器中对结果进行哈希处理,然后遍历值数组以检查更大的filter属性。

代码语言:javascript
复制
const
  output = input.reduce((a, o) => {
    let k = Object.keys(o)[0];
    o[k].forEach(e => {
      if ((a[k] ??= { ...e }).filter < e.filter) {
        a[k] = { ...e };
      }
    });
    return a;
  }, {});

console.log(output); // Output is an object with each category as property.
console.log(Object.values(output)); // or Array from Object.values()
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }
代码语言:javascript
复制
<script>
const input = [{ "Screen Size": [{ "name": "15 inch - 15.9 inch", "filter": "200067-200324", "isChecked": true }] }, { "Type": [{ "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }] }, { "Type": [{ "name": "Laptop", "filter": "200060-200288", "isChecked": true, }, { "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }] }, { "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }] }, { "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }, { "name": "Dell", "filter": "200140-200888", "isChecked": true, }] }]
</script>

如果您的顶级对象将具有多个属性,则需要迭代每个条目,而不仅仅是检索第一个属性。

代码语言:javascript
复制
const input = [
  {
    "Screen Size": [],
    "Type": [],
    "Brand": []
  }, {
    "Type": [],
    "Brand": []
  }
];

代码语言:javascript
复制
const
  output = input.reduce((a, o) => {
    Object.entries(o).forEach(([k, v]) => {
      v.forEach(e => {
        if ((a[k] ??= { ...e }).filter < e.filter) {
          a[k] = { ...e };
        }
      });
    });
    return a;
  }, {});

console.log(output); // Output is an object with each category as property.
console.log(Object.values(output)); // or Array from Object.values()
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }
代码语言:javascript
复制
<script>
const input = [{ "Screen Size": [{ "name": "15 inch - 15.9 inch", "filter": "200067-200324", "isChecked": true }], "Type": [{ "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }], "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }] }, { "Type": [{ "name": "Laptop", "filter": "200060-200288", "isChecked": true, }, { "name": "Ultrabook", "filter": "200060-200289", "isChecked": true, }, { "name": "Notebook", "filter": "200060-200290", "isChecked": true, }], "Brand": [{ "name": "HP", "filter": "200140-200886", "isChecked": true, }, { "name": "Lenovo", "filter": "200140-200887", "isChecked": true, }, { "name": "Dell", "filter": "200140-200888", "isChecked": true, }] }]
</script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65438239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档