javascript сортировка некоторых элементов массива в другой массив - PullRequest
0 голосов
/ 30 апреля 2020

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

let myArray = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk']
let talk = []
let perfo = []
let init = []

for (let i = 0; i < myArray.length; i + 2) {
    if (myArray[i + 1] == 'talk') {
        talk.push(myArray[i])
    } else if (myArray[i + 1] == 'perfo') {
        perfo.push(myArray[i])
    } else if (myArray[i + 1] == 'init') {
        init.push(myArray[i])
    } else {}
}

ожидаемый результат:

talk [22, 42], perfo [35], init [42]

, но почему-то это даже не похоже на получение л oop.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Объект - это то же самое, что и массив, но вместо числа в качестве индекса у него есть строка, поэтому мы можем использовать объект для восстановления исходного массива.

let myArray = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk']

let arrays = {}
for (let i = 0; i < myArray.length; i+=2) {
  const arrayName = myArray[i+1];
  
  if (arrays[arrayName]) {
    arrays[arrayName].push(myArray[i])
  } else {
    arrays[arrayName] = [myArray[i]]
  }
}

console.log(arrays);
// [object Object] {
//  init: [35],
//  perfo: [31],
//  talk: [22, 42]
// }
0 голосов
/ 30 апреля 2020

Вы можете взять объект с желаемыми массивами и получить sh значения для него.

let data = [22, 'talk', 31, 'perfo', 35, 'init', 42, 'talk'],
    talk = [],
    perfo = [],
    init = [],
    temp = { talk, perfo, init },
    i = 0;

while (i < data.length) {
    let [value, key] = data.slice(i, i += 2);
    temp[key].push(value);
}

console.log(talk);
console.log(perfo);
console.log(init);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...