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

Javascript 如何从数组中获取前N个元素,javascript,reactjs,Javascript,Reactjs,我正在使用Javascript(ES6)/FacebookReact,并试图获得大小不同的数组的前3个元素。我想做Linq take(n)的等价物 在我的Jsx文件中,我有以下内容: var items = list.map(i => { return ( <myview item={i} key={i.id} /> ); }); _.take([1, 2, 3]); // => [1] _.take([1, 2, 3], 2); // =>

我正在使用Javascript(ES6)/FacebookReact,并试图获得大小不同的数组的前3个元素。我想做Linq take(n)的等价物

在我的Jsx文件中,我有以下内容:

var items = list.map(i => {
  return (
    <myview item={i} key={i.id} />
  );
});
_.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);
// => []
var items=list.map(i=>{
返回(
);
});
然后,为了得到我试过的前3个项目

  var map = new Map(list);
    map.size = 3;
    var items = map(i => {
      return (<SpotlightLandingGlobalInboxItem item={i} key={i.id} />);
    });
var映射=新映射(列表);
map.size=3;
变量项=映射(i=>{
返回();
});
这不起作用,因为map没有set函数


您能帮忙吗?

要获取数组的第一个
n
元素,请使用

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

不要尝试使用映射函数执行此操作。映射函数应用于将值从一个对象映射到另一个对象。当输入和输出的数量匹配时

在这种情况下,请使用阵列上也可用的筛选函数。当您希望有选择地获取符合特定条件的值时,将使用Filter函数。然后您可以像这样编写代码

var items = list
             .filter((i, index) => (index < 3))
             .map((i, index) => {
                   return (
                     <myview item={i} key={i.id} />
                   );
              });
var items=list
.过滤器((i,索引)=>(索引<3))
.map((i,索引)=>{
返回(
);
});

我相信您需要的是:

// ...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>   
)
/…在render()函数中
变量大小=3;
var items=list.slice(0,size).map(i=>{
返回
}
返回(
{items}
)
这可能会令人惊讶,但数组的
length
属性不仅用于获取数组元素的数量,而且还可写,可用于设置数组的长度。这将改变数组

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

清空数组

arr.length = 0

以下几点对我有用

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

您可以使用数组的
索引进行筛选

var月数=['1月'、'3月'、'4月'、'6月'];
月份=月份。过滤器((月份,idx)=>idx<2)
console.log(月);
使用您可以执行以下操作:

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

举一个简单的例子:

var letters = ["a", "b", "c", "d"];
var letters_02 = letters.slice(0, 2);
console.log(letters_02)
输出:[“a”、“b”]

输出:[“b”]

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

使用,
take
功能,可以通过以下方式实现:

var items = list.map(i => {
  return (
    <myview item={i} key={i.id} />
  );
});
_.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);
// => []


也许我误解了这个问题,但是为什么不使用类似于
list.slice(0,3);
的东西,然后迭代呢?为什么要使用map?如果我正确理解您的要求,您可以使用slice来获取前n个元素。如果老师让您使用map?:)如果这是一个合法的问题,我很抱歉,但是,这只是一个家庭作业。请考虑将已接受的答案改为对公众更有用的答案。但是,在语义上,你应该使用过滤器来先过滤一组元素,然后,如果采用这种方法,请映射筛选的下集。筛选函数将遍历数组中的所有元素,而切片则不会,因此使用切片性能更好,对吗?您确定这比
arr=[]
更快吗?这里的好处是避免内存分配。在运行时为游戏初始化新对象会触发垃圾收集器和jank。值得一提的是,这将改变数组,其中slice将返回一个浅拷贝。如果您需要使用刚刚被永久截断的项,这将是一个很大的区别。@y不好,我将使它更明显一点。如果数组小于,这也将扩展数组。注意数组上的
slice
函数返回数组的浅层副本,并且不修改原始数组。如果n大于size,这会引发错误吗?@Rishabh876不,不会。对于
array.slice(0,n)
返回
[0,min(n,array.length))
。在第一个示例中,您使用
切片
,但在第二个示例中,您使用
拼接
。这也是错误的。您将从中获得
[“Apple”,“Mango”]
。切片的第一部分不是“从何处开始删除”,它是切片的起始位置。它不会修改原始数组,也不会删除任何内容。这是不正确的。切片返回切片项的新数组。应为
fruits.slice(0,2)
,其中
0
是起始索引,
2
是要取的数字。
。单独使用filter
不是一个很好的选择,至少在输入数组可能很长的情况下不是。
。filter
检查数组的每个元素,检查其状态。
。slice
不会这样做,但只会提取f先输入n个元素,然后停止处理——这肯定是你想要的一个长列表。(正如@elQueFaltaba在对另一个答案的评论中所说的。)