Зацикливание массива и перемещение элементов массива в новые массивы? - PullRequest
0 голосов
/ 18 апреля 2019

Я построил массив, который выглядит следующим образом:

[
 ["featured", [7]]
 ["news", [8,9]]
]

Мне нужно сделать цикл по родительскому массиву и переместить элементы в дочерних массивах в новые массивы.Так что в приведенном выше примере я хотел бы переместить значения в два новых массива, которые будут выглядеть следующим образом:

var name = ["featured","news"]
var ids = [[7], [8,9]]

Я не уверен, что лучший способ выполнить эту задачу, зациклив родительский массив

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Неэффективно запускать 2 цикла, где один цикл может доставить решение. Используйте .forEach для зацикливания каждого элемента в массиве.

let arr = [
  ["featured", [7]],
  ["news", [8,9]]
];
    
let names = [];
let val = [];
arr.forEach((i) => {
  names.push(i[0]);
  val.push(i[1])
});
    
console.log(names, val); // Will logs ["featured","news"] [[7], [8,9]]
0 голосов
/ 18 апреля 2019

Мы также можем использовать Array.flat для выравнивания массива и проверки элементов.

  • Первый тест для массивов.
  • Второй тест для строк.

const arr = [
 ["featured", [7]],
 ["news", [8,9]]
];
const ids = arr.flat().filter((itm) => Array.isArray(itm));
const name = arr.flat().filter(itm => typeof itm === "string");
console.log(ids);
console.log(name);
0 голосов
/ 18 апреля 2019

Вы можете сделать это, используя reduce() и forEach()

let arr = [
 ["featured", [7]],
 ["news", [8,9]]
]

let [names,ids] = arr.reduce((ac,a) => {
  return ac.forEach((x,i) => x.push(a[i].length === 1 ? a[i][0] : a[i])) || ac;
},[[],[]])
console.log(ids)
console.log(names)

Вы также можете использовать map().

let arr = [
 ["featured", [7]],
 ["news", [8,9]]
]

let ids = arr.map(x => x[1]);
let names = arr.map(x => x[0]);
console.log(ids)
console.log(names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...