javascript - 在javascript中从现有数组创建自定义数组

标签 javascript arrays

我有一个如下所示的数组:

var search = [
    { code: "t1", name1: "n1", name2: "n2" },
    { code: "t1", name1: "n5", name2: "n6" },
    { code: "t2", name1: "n10", name2: "n11" },
    { code: "t2", name1: "n18", name2: "n20" },
    { code: "t3", name1: "n18", name2: "n20" },
];

我想将这个数组转换成下面的格式:

var finald = [
    { code: "t1", name1: "n1,n5", name2: "n2,n6" },
    { code: "t2", name1: "n10,n18", name2: "11,n20" },
    { code: "t3", name1: "n18", name2: "n20" },
];

我试过如下代码。但没有成功。 首先,我从数组中收集了所有唯一的 code:

var flags = [];
var codes = [];
for(var z=0; z<search.length; z++){
    if( flags[data[z].code]) continue;
    flags[data[z].code] = true;
    codes.push(data[z].code);
}

var finald = [];
for(var i=0; i<search.length; i++){

    var name1 = [];
    var name2 = [];
    for(var y=0; y<codes.length; y++){
        if(codes[y] == search[i].code ){

                var row = {
                    code: codes[y],
                    name1:search[i].name1,
                    name2:search[i].name2,


                };
                finald.push(row);
        }
    }   
}

请帮助。

最佳答案

这不完全是您要求的,但仍然尝试这种方法。

你基本上想通过键“code”对数组执行“join”操作,所以也许尝试将你的数组转换为 map 对象 - key: code , value : {name1, name2}

jsfiddle

var search = [
  {code:"t1", name1:"n1", name2:"n2"},
  {code:"t1", name1:"n5", name2:"n6"},
  {code:"t2", name1:"n10", name2:"n11"},
  {code:"t2", name1:"n18", name2:"n20"},
  {code:"t3", name1:"n18", name2:"n20"}];

const myMap = new Map();

search.forEach((obj) => {
  const key = obj.code;
  if(!myMap.has(key)) {
    myMap.set(key, {
      'name1' : obj.name1,
      'name2' : obj.name2
    });
  } else {
    var ele = myMap.get(key);
    ele.name1 = `${ele.name1},${obj.name1}`;
    ele.name2 = `${ele.name2},${obj.name2}`;
  }
}); 
console.log(myMap);

/*
    key: "t1" => value: {name1:"n1,n5", name2:"n2,n6"},
    key: "t2" => value: {name1:"n10,n18", name2:"n11,n20"},
    key: "t3" => value: {name1:"n18", name2:"n20"}
*/

如果你必须以数组形式将它添加到上面, jsfiddle

var resArray = [];
myMap.forEach((value, key) => {
    resArray.push(Object.assign({'code': key}, value));
});

console.log(resArray);

/*
    [{ code: "t1", name1: "n1,n5", name2: "n2,n6" },
     { code: "t2", name1: "n10,n18", name2: "11,n20" },
     { code: "t3", name1: "n18", name2: "n20" }]
*/

关于javascript - 在javascript中从现有数组创建自定义数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48787547/

相关文章:

javascript - 网格中的最后一列需要自定义标题

javascript - 更新 Chrome 扩展中的选项卡并等待它打开以打开另一个下载链接。如何等到 url 在选项卡中打开?

JavaScript :focus For Each Input

javascript - 如何在 Spyder IDE 中使用 Javascript?

c# - 采用 List<T>[] 的 Action 委托(delegate)的问题

c - 替换数组中的数据时出现问题

javascript - Email.send 问题是电子邮件未在 Meteor 中定义

php - 获取值作为数组值

java - 如何在java中对特定的二维数组进行排序

无法读取C中的结构数组