11

Как получить первые N элементов массива

12

Я работаю с Javascript (ES6) и React от Facebook и пытаюсь получить первые 3 элемента массива, который имеет переменный размер. Мне нужно сделать эквивалент метода Linq Take(n).

В моем JSX файле у меня есть следующий код:

var items = list.map(i => {
  return (
    <myview item={i} key={i.id} />
  );
});

Затем, чтобы получить первые 3 элемента, я попробовал следующее:

var map = new Map(list);
map.size = 3;
var items = map(i => {
  return (<SpotlightLandingGlobalInboxItem item={i} key={i.id} />);
});

Однако это не сработало, так как у объекта Map нет функции set. Что мне попробовать в следующий раз?

5 ответ(ов)

18

Чтобы получить первые n элементов массива, используйте следующий код:

const slicedArray = array.slice(0, n);

Функция slice создает новый массив, содержащий элементы, начиная с индекса 0 и до индекса n (не включая его).

8

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

// ...внутри функции render()

var size = 3;
var items = list.slice(0, size).map(i => {
    return <myview item={i} key={i.id} />
});                       
return (
  <div>
    {items}
  </div>   
)

Этот код обрезает массив list до первых трех элементов и создаёт компонент myview для каждого из них, используя i.id в качестве уникального ключа. Надеюсь, это поможет!

0

Использование метода Slice

Метод slice() в JavaScript возвращает часть массива в новом массиве, выбранном от начального до конечного индекса, где начальный и конечный индексы представляют позиции элементов в исходном массиве. При этом оригинальный массив не изменяется.

Синтаксис: slice(start, end)

Допустим, у нас есть массив с 7 элементами [5,10,15,20,25,30,35], и мы хотим получить первые 5 элементов из этого массива:

let array = [5,10,15,20,25,30,35];
let newArray = array.slice(0, 5);

console.log(newArray);

В результате newArray будет содержать [5, 10, 15, 20, 25].

0

Вы можете отфильтровать массив, используя его индекс. Например, в следующем коде мы оставляем только два первых элемента массива months:

var months = ['Jan', 'March', 'April', 'June'];
months = months.filter((month, idx) => idx < 2);
console.log(months);

В результате выполнения этого кода вы получите массив, содержащий только 'Jan' и 'March'.

0

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

В вашем случае лучше использовать функцию filter, которая также доступна для массивов. Функция filter предназначена для выборки значений, соответствующих определённым критериям. Вот как можно переписать ваш код:

var items = list
             .filter((i, index) => (index < 3))
             .map((i) => {
                   return (
                     <myview item={i} key={i.id} />
                   );
              });

Таким образом, сначала отфильтровав элементы, вы получите нужные данные, а затем сможете безопасно применить map для их отображения.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь