仅在一个数组中将不同元素转换为数组

问题描述 投票:-1回答:1

我试图在一个数组中显示多个元素。 (见例)

但我不知道怎么做......

谢谢你的帮助

我显示我的脚本:

****Du code******

var color = [];
var risk = []; 
if(Operational.length == group.name.length){
  color = "green";
  risk = "Operational";
  console.log(group.name);
  // toto
  // tata
  // titi
}

if(Test.length > 0){
  color = "";
  risk = "";
}

 if(PartialOutage.length > 0){
   color = "orange"
   risk = "Partial";
 }

 if(MajorOutage.length > 0){
   color = "red";
   risk = "Major ";
 }
  var Group = new Array(color,risk,group.name);     
   Groups.push(Group);
   Groups.sort();
 }
});          
console.log(Groups);
}

**** Du code *****

实际结果 :

[ [ 'green', 'Operational', 'toto' ],
[ 'green', 'Operational', 'tata' ],
[ 'green', 'Operational', 'titi' ],
[ 'orange', 'Partial', 'test' ],
[ 'red', 'Major ', 'test2' ] ]

预期结果 :

[ [ 'green', 'Operational', 'toto,tata,titi' ],
[ 'orange', 'Partial', 'test' ],
[ 'red', 'Major ', 'test2' ] ]
javascript
1个回答
0
投票

检查这个。使用Array#reduce按照预期格式创建最终数组值

  1. 将第一个子数组推入New Array a
  2. 然后使用新创建的数组b循环每个a子数组
  3. 使用forloop打破循环
  4. 如果子数组值存在于新数组a中。然后合并两个数组并过滤重复的//Check the comments in snippet

var a = [
  ['green', 'Operational', 'toto'],
  ['green', 'Operational', 'tata'],
  ['green', 'Operational', 'titi'],
  ['orange', 'Partial', 'test'],
  ['red', 'Major ', 'test2']
];

a = a.reduce(function(a, b) {
  for (var i = 0; i <= b.length; i++) {
    var brk = false;
    var check = true;
    if (a.length > 0) {
      a.forEach(function(k, ind) {
        if (k.indexOf(b[i]) > -1) { //if contains same arg
          k = k.concat(b); //join two array
          var j = k.filter((l,n)=> k.filter(m=> m == l).length == 1).filter(o=>o)
          a[ind] = k.filter((l, n) => k.indexOf(l) != n); // filter duplicate
          a[ind].push(j.join(','))
          brk = true; //then break the statement
          check = true;
        } else {
          check = false; //its not contain any arg direct push child into new array
        }
      })
      if (brk) {
        break;
      }
      if (!check) {
        a.push(b)
      }
    } else {
      a.push(b);
    }
  }
  return a // recreated new array return
}, []);

console.log(a);
© www.soinside.com 2019 - 2024. All rights reserved.