#javascript #arrays
#javascript #массивы
Вопрос:
Я намерен разделить массив с помощью разделителя и выбрать предел его разделения.
var arr = [89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'];
var res = [];
while (arr.length) {
res.push(arr.splice(0, 2));
}
console.log(res)
Например: If 0
— разделитель и 2
является пределом
arr.split(0, 2)
[[89, 'sdf'], [null]] //output
Комментарии:
1. почему ноль исчез?
2. Почему вы сохраняете
null
, но удаляете0
?3. @NinaScholz это потому, что он хочет разделить массив, используя 0 в качестве разделителя
4. Как это работает?? Разве это не должно быть
[[89, "sdf"], [0, true]]
?5. Идея состоит в том, чтобы использовать 0 в качестве разделителя и выводить значение [[89, ‘sdf’], [null]], если пользователь решит разделить массив следующим образом arrat.split(0, 2) или array.separate(0, 2) .
Ответ №1:
Вы могли бы использовать indexOf
и splice
подобное:
var arr = [89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'];
function splitArray(arr, seperator, count) {
let result = [],
copy = arr.slice(), // if you don't want to mutate the original array
counter = 0;
while(counter < count amp;amp; copy.length > 0) {
const index = copy.indexOf(seperator);
if(index !== - 1) {
result.push(copy.splice(0, index));
copy.shift(); // remove the seperator
}
else result.push(copy.splice(0)) // add the remaining items
counter
}
return result
}
console.log(splitArray(arr, 0, 2))
console.log(splitArray(arr, 0, 3))
Ответ №2:
Вы можете выполнить итерацию массива и взять счетчик, который работает как индекс для результирующего массива, и поместить элемент в результирующий массив счетчика.
function split(array, length, separator) {
var result = [],
count = 0,
i = 0;
while (count < length amp;amp; i < array.length) {
if (array[i] === separator) {
count ;
i ;
continue;
}
result[count] = result[count] || [];
result[count].push(array[i ]);
}
return resu<
}
console.log(split([89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'], 2, 0));
Версия с indexOf
и slice
.
function split(array, length, separator) {
var result = [],
p,
i = 0;
while ((p = array.indexOf(separator, i)) !== -1 amp;amp; result.length < length) {
result.push(array.slice(i, p));
i = p 1;
}
if (result.length < length) result.push(array.slice(i));
return resu<
}
console.log(split([89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'], 2, 0));
console.log(split([89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'], 5, 0));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Комментарии:
1. Ах, умно и просто, я написал решение, используя сериализацию, разделение, обрезку, десериализацию, но старые добрые циклы будут легче выполнять эту работу
Ответ №3:
вы можете использовать этот
var arrays = [], size = 2;
var arr = [89, 'sdf', 0, null, 0, true, 89, 0, 'sdf'];
while (arr.length > 0)
arrays.push(arr.splice(0, size));