首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript将数组缩减为特定结构

使用javascript将数组缩减为特定结构
EN

Stack Overflow用户
提问于 2018-09-29 15:39:29
回答 6查看 104关注 0票数 0

我有一个对象数组

代码语言:javascript
复制
[
    {"id":"brand","label":"Brand","value":"value1"},    
    {"id":"waterproof","label":"Waterproof","value":"value1"},
    {"id":"diameter","label":"Diameter","value":""},
    {"id":"brand","label":"Brand","value":"value2"},
    {"id":"waterproof","label":"Waterproof","value":"value2"},
    {"id":"diameter","label":"Diameter","value":""}
]

我需要把它重组成下面的结构,

代码语言:javascript
复制
[
    ["Brand", "value1", "value2"], 
    ["Waterproof", "value1","value2"], 
    ["Diameter","",""]
]

关于如何使用reduce方法来做这件事的任何想法。

最好的

EN

回答 6

Stack Overflow用户

发布于 2018-09-29 15:41:22

只需获取一个Map并收集所有值。

代码语言:javascript
复制
var json = '[{"id":"brand","label":"Brand","value":"value1"},{"id":"waterproof","label":"Waterproof","value":"value1"},{"id":"diameter","label":"Diameter","value":""},{"id":"brand","label":"Brand","value":"value2"},{"id":"waterproof","label":"Waterproof","value":"value2"},{"id":"diameter","label":"Diameter","value":""}]',
    result = Array.from(JSON
        .parse(json)
        .reduce((m, { id, label, value }) => m.set(id, (m.get(id) || [label]).concat(value)), new Map)
        .values()
    );
    
console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2018-09-29 15:45:01

尝试使用Array.reduceObject.values进行以下操作

代码语言:javascript
复制
let arr = [{"id":"brand","label":"Brand","value":"value1"},{"id":"waterproof","label":"Waterproof","value":"value1"},{"id":"diameter","label":"Diameter","value":""},{"id":"brand","label":"Brand","value":"value2"},{"id":"waterproof","label":"Waterproof","value":"value2"},{"id":"diameter","label":"Diameter","value":""}];

let result = Object.values(arr.reduce((a,c) => {
  if(a[c.id]) a[c.id].push(c.value);
  else a[c.id] = [c.label, c.value];
  return a;
}, {}));
console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2018-09-29 16:12:08

这不是最好的代码,但我认为这可能对你有用:

代码语言:javascript
复制
let data = [
        {"id":"brand","label":"Brand","value":"value1"},    
        {"id":"waterproof","label":"Waterproof","value":"value1"},
        {"id":"diameter","label":"Diameter","value":""},
        {"id":"brand","label":"Brand","value":"value2"},
        {"id":"waterproof","label":"Waterproof","value":"value2"},
        {"id":"diameter","label":"Diameter","value":""}
    ]

    let reducedData = {}
    data.forEach((row)=>{
        reducedData[row.id] ? reducedData[row.id].push(row.value) : reducedData[row.id] = [row.label, row.value]    
    })
    let newData = Object.keys(reducedData).map((id)=>{return [...reducedData[id]]})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52566273

复制
相关文章

相似问题

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