Разделение значения массива в цикле ForEach с помощью JavaScript? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь сделать цикл forEach, взять каждый элемент и разделить его на персонажа. В этом случае я хочу разделить текст элемента массива на «||». Что у меня сейчас есть:

var array = [
  [
    "featured", ["feat||1", "feat||2", "feat||3"]
  ],
  [
    "new", ["new||1", "new||2", "new||3"]
  ]
];

var taxIDs = [];


array.forEach((i) => {
  if (i[1].length) {
    taxIDs.push(i[1].split("||")[1]);
  }
});

Итак, я пытался взять i [1] и разделить его на "||" и получить второй элемент в этом массиве split, но при этом выбрасывает ошибку и не уверен, что лучший подход для достижения того, что мне нужно?

РЕДАКТИРОВАТЬ (это то, что я вижу, когда консоль регистрирует мой массив:

(3) [Array(2), Array(2)]
 0: (2) ["featured", Array(3)]
   0: "featured"
   1: (3) ["feat||1", "feat||2", "feat||3"]
 1: (2) ["news", Array(2)]
   0: "news"
   1: (2) ["news||1", "news||2", "news||3"]

Таким образом, в этом массиве есть 3 уровня массивов.

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

Здесь у вас есть один возможный подход с использованием Array.reduce () и деструктурирование вложенных массивов.

var array = [
  [
    "featured", ["feat||1", "feat||2", "feat||3"]
  ],
  [
    "new", ["new||1", "new||2", "new||3"]
  ]
];

var taxIDs = array.reduce(
    (acc, [str, arr]) => [...acc, arr.map(str => +str.split("||")[1])], 
    []
);

console.log("taxIDs is: ", taxIDs);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Вы также можете заменить .map() на тот, который использует match() в строке:

arr.map(str => +str.match(/\d+/)[0])

Кроме того, вы можете избежать унарного плюс , если хотите, чтобы ids оставалось в виде строк:

arr.map(str => str.split("||")[1])
// OR
arr.map(str => str.match(/\d+/)[0])
0 голосов
/ 19 апреля 2019

var array = [
  [
    "featured", ["feat||1", "feat||2", "feat||3"]
  ],
  [
    "new", ["new||1", "new||2", "new||3"]
  ]
];

var taxIDs = [];

array.forEach(item => {
  taxIDs.push(item[1].map(elem => elem.split('||')[1]));
});

console.log(taxIDs);
0 голосов
/ 19 апреля 2019
var array = [
  [
    "featured", ["feat||1", "feat||2", "feat||3"]
  ],
  [
    "new", ["new||1", "new||2", "new||3"]
  ]
];

var taxIDs = [];

array.forEach(function(value, index){ value[1].forEach(function(value, index){taxIDs.push(value.split("||")[0])})})

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

 ["feat", "feat", "feat", "new", "new", "new"]

или если вы хотите такие ключи, как

taxIDs
(6) ["1", "2", "3", "1", "2", "3"]

затем небольшие изменения в цикле, как показано ниже

array.forEach(function(value, index){ value[1].forEach(function(value, index){taxIDs.push(value.split("||")[1])})})

Это будет работать для вас сейчас, в соответствии с вашей обновленной структурой массива и вопросом

этот цикл forEach даст вам базовые знания о том, как работает моя логика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...