Javascript 如何从数组中获取前N个元素
我正在使用Javascript(ES6)/FacebookReact,并试图获得大小不同的数组的前3个元素。我想做Linq take(n)的等价物 在我的Jsx文件中,我有以下内容: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); // =>
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在对另一个答案的评论中所说的。)