繁体   English   中英

如何从数组中获取前N个元素

[英]How to get first N number of elements from an array

我正在使用 Javascript(ES6) /FaceBook react 并尝试获取大小不同的数组的前 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} />);
    });

这不起作用,因为地图没有设置功能。

你能帮忙吗?

要获取数组的前n元素,请使用

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

我相信您正在寻找的是:

// ...inside the render() function

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

这可能令人惊讶,但数组的length属性不仅用于获取数组元素的数量,而且它也是可写的,并且可以用于设置数组的长度MDN 链接 这将改变数组。

如果您不关心不变性或不想为游戏分配内存,这将是最快的方法。

清空数组

arr.length = 0

您可以使用数组的index进行过滤。

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

使用切片方法

javascript slice()方法将数组的一部分返回到从开始到结束选择的新数组对象中,其中开始和结束表示该数组中项目的索引。 原始数组不会被修改。

语法: 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)

不要尝试使用地图功能。 映射函数应该用于将值从一件事映射到另一件事。 当输入输出数量匹配时。

在这种情况下,请使用阵列上也可用的过滤器功能。 当您想要有选择地获取符合特定条件的值时,使用过滤器功能。 然后你可以写你的代码

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

以下对我有用。

array.slice( where_to_start_deleting, array.length )

这是一个例子

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.slice(2, fruits.length);
//Banana,Orange  ->These first two we get as resultant

试试这个从列表中获取前n元素:

const slicedList = list.slice(0, n);

例子:

 const list = [1,2,3,4,5] console.log(list.slice(0, 3)) // Should return [1,2,3] console.log(list.slice(0, 10)) // Returns [1,2,3,4,5] since this is all we have in 1st 10 elements

使用一个简单的例子:

var letters = ["a", "b", "c", "d"];
var letters_02 = letters.slice(0, 2);
console.log(letters_02)

输出:[“a”,“b”]

var letters_12 = letters.slice(1, 2);
console.log(letters_12)

输出:[“b”]

注意: slice仅提供拷贝,不会修改原始数组。

使用lodashtake函数,您可以通过以下方式实现:

_.take([1, 2, 3]);
// => [1]
 
_.take([1, 2, 3], 2);
// => [1, 2]
 
_.take([1, 2, 3], 5);
// => [1, 2, 3]
 
_.take([1, 2, 3], 0);
// => []

slice() 方法将数组的一部分的浅表副本返回到从开始到结束(不包括结束)选择的新数组对象中,其中开始和结束表示该数组中项目的索引。 原始数组不会被修改。

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// expected output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// expected output: Array ["camel", "duck"]

了解更多

Pawel 的答案似乎是资源关键环境中的最佳选择,并且可以丢弃剩余元素。

考虑到数组已经比较小的情况,这是一个小小的改进:

if (arr.length > n) arr.length = n

使用https://www.npmjs.com/package/manipula,您可以通过LINQ样式完成:

Manipula.from([0,1]).take(1).toArray();

使用LInQer ,您可以:

Enumerable.from(list).take(3).toArray();

虽然这个问题很老了,但至于 2021 年,已经有了用 ECMAScript(javascript)的最新特性编写的 LINQ to object 的完整实现。

Github 存储库是: https ://github.com/IlanAmoyal/WebPartyLinq

也许我错过了一些东西,但感觉就像通过建议使用splice()来踢一扇敞开的门? 当然,重要的是要记住这会修改数组。

 const myArray = [ 'one', 'two', 'three', 'four', 'five', 'six', 'seven', ] myArray.splice(3) console.log(myArray) // expected output: ['one', 'two', 'three']

也可以获取数组中保留的元素之外的元素:

 const myArray = [ 'one', 'two', 'three', 'four', 'five', 'six', 'seven', ] const afterFirstThree = myArray.splice(3) console.log(myArray) // expected output: ['one', 'two', 'three'] console.log(afterFirstThree) // expected output: ['four', 'five', 'six', 'seven'] // if n is larger than myArray.length the entire array is kept and if trying to grab the return, it will be an empty array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM