Concat два массива, один из которых также является массивом - PullRequest
1 голос
/ 13 марта 2019

Как объединить два массива, один из которых также является массивом.Похоже, это

let stat = [
  ["completed", "0", "0", "0"],
  ["due", "1", "2", "2"],
  ["warning", "0", "0", "0"]
]

let val = [
  [0, 0, 0],
  [1, 2, 2],
  [0, 0, 0]
]



var arr = [];
for (var i = 0; i < stat.length; i++) {
  var temp = [stat[i][0].concat([val[i]])];
  arr.push(temp);
}
console.log(arr)

Когда console.log выводит:

["Completed0,0,0"]
["Due1,2,2"]
["Warning0,0,0"]

, и я хочу, чтобы результат выглядел следующим образом:

["Completed", 0, 0, 0]
["Due", 1, 2, 2]
["Warning", 0, 0, 0]

Как я могу получить новый массив таким образом?Спасибо!

Ответы [ 3 ]

5 голосов
/ 13 марта 2019

let stat = [
  ["completed", "0", "0", "0"],
  ["due", "1", "2", "2"],
  ["warning", "0", "0", "0"]
]

let val = [
  ["0", "0", "0"],
  ["1", "2", "2"],
  ["0", "0", "0"]
]


var arr = [];
for (var i = 0; i < stat.length; i++) {
  var temp = stat[i].concat(
    val[i].filter(x => !stat[i].includes(x))
  );
  arr.push(temp);
}
console.log(arr);
1 голос
/ 13 марта 2019

Вы получаете строковый результат в массиве, потому что вы берете первый элемент массива и используете concat, который работает как для строк (String#concat), так и для массивов (* 1005) *Array#concat), но в случае строки параметр преобразуется в строку. Результатом является строчка, а не отдельные значения массива.

var stat = [["completed", "0", "0", "0"], ["due", "1", "2", "2"], ["warning", "0", "0", "0"]],
    val = [[0, 0, 0], [1, 2, 2], [0, 0, 0]],
    arr = [];

for (var i = 0; i < stat.length; i++) {
    var temp = [stat[i][0]].concat(val[i]);
    arr.push(temp);
}
console.log(arr)

Более короткий подход - сопоставить первый элемент со значениями val.

var stat = [["completed", "0", "0", "0"], ["due", "1", "2", "2"], ["warning", "0", "0", "0"]],
    val = [[0, 0, 0], [1, 2, 2], [0, 0, 0]],
    result = stat.map(([v], i) => [v, ...val[i]]);

console.log(result);
0 голосов
/ 13 марта 2019

После комментария mplungjan , почему бы не использовать только один массив?

stats = [
  ["completed", "0", "0", "0"],
  ["due", "1", "2", "2"],
  ["warning", "0", "0", "0"]
];

stats2 = stats.map(function (x) {
  return [
    x[0],
    parseInt(x[1], 10),
    parseInt(x[2], 10),
    parseInt(x[3], 10)
  ];
});

for (i = 0; i < stats2.length; i++) {
  console.log(JSON.stringify(stats2[i]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...