Как вырезать из массива объектов в JS? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть массив таких объектов:

const books =[ 
{id: "1", name: "twilight", category: "Movies", price: 10}, 
{id: "2", name: "jaws", category: "Movies", price: 22}, 
{id: "3", name: "the shining", category: "Movies", price: 1},
{id: "4", name: "beers", category: "Movies", price: 10}, 
{id: "5", name: "apples", category: "Movies", price: 22}, 
{id: "6", name: "mono", category: "Movies", price: 1}
]

Попытка нарезать первые 2, затем вторые 2 и т. Д.

Как я могу разделить на 2 книги одновременно?

Ответы [ 6 ]

0 голосов
/ 31 октября 2018

Поскольку вы используете lodash , вы можете использовать _.chunk ( lodash # chunk ) для заполнения массива массивом, содержащим первые 2, затем вторые 2 и т. Д. ..

_.chunk(books, 2)

Вот рабочий пример:

const books = [ 
    {id: "1", name: "twilight", category: "Movies", price: 10}, 
    {id: "2", name: "jaws", category: "Movies", price: 22}, 
    {id: "3", name: "the shining", category: "Movies", price: 1},
    {id: "4", name: "beers", category: "Movies", price: 10}, 
    {id: "5", name: "apples", category: "Movies", price: 22}, 
    {id: "6", name: "mono", category: "Movies", price: 1}
  ],
  res = _.chunk(books, 2);
  
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Теперь у вас есть массив chunked, итерируйте и берите один за другим, чтобы получить именно то, что вам нужно!

0 голосов
/ 31 октября 2018

Вы также можете попробовать этот фрагмент кода -

var chunckedArray = function(books, chunkCount){
     var chunks = [];
     while(books.length){
         chunks.push(books.splice(0, chunkCount));
     }
     return chunks;
};

chunckedArray(books, 2); // [Array(2), Array(2), Array(2)]
0 голосов
/ 31 октября 2018

Array.prototype.slice ()

Метод slice () возвращает поверхностную копию части массива в новый объект массива, выбранный от начала до конца (конец не включен). Исходный массив не будет изменен.

Попробуйте с for цикл с шагом 2 в каждой итерации. Передайте текущее значение i в качестве позиции start и i+2 в качестве позиции end в качестве параметра метода:

const books =[ 
  {id: "1", name: "twilight", category: "Movies", price: 10}, 
  {id: "2", name: "jaws", category: "Movies", price: 22}, 
  {id: "3", name: "the shining", category: "Movies", price: 1},
  {id: "4", name: "beers", category: "Movies", price: 10}, 
  {id: "5", name: "apples", category: "Movies", price: 22}, 
  {id: "6", name: "mono", category: "Movies", price: 1}
]

for(var i=0; i<books.length; i+=2){
  var sliced = books.slice(i, i+2);
  console.log(sliced);
}
0 голосов
/ 31 октября 2018

Для индекса можно использовать цикл for с двумя шагами за раз и срезать на основе текущего индекса.

for (var i=0; i<books.length; i+=2) {
    console.log(books.slice(i, i+2));
}

Это также работает, даже если есть нечетное количество книг

0 голосов
/ 31 октября 2018

Использовать скользящий итератор вдовы, который располагается рядом с набором из 2 книг одновременно

function two_at_a_time(arr, func){
    for(var i=0; i < arr.length - 1; i++){
        func(arr[i], arr[i + 1]);
    }
}

two_at_a_time(books, function(current, next){
    console.log(current, next);
});
0 голосов
/ 31 октября 2018

Вы можете использовать функцию слайса, передавая количество книг слайсу (т.е. 2):

let slicedBooks = []
for(var i = 0;i < books.length;i+= 2){
    let part_slice = books.slice(i, 2 + i);
    slicedBooks.push(part_slice);
    console.log(part_slice);
}
console.log(slicedBooks);

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

...