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

时间:2016-01-19 17:19:18

标签: javascript reactjs

我正在使用Javascript(ES6)/ 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} />);
    });

由于地图没有设定功能,因此无法正常工作。

你能帮忙吗?

13 个答案:

答案 0 :(得分:398)

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

array.slice(0, n);

答案 1 :(得分:248)

我相信你正在寻找的是:

// ...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>   
)

答案 2 :(得分:14)

这可能会令人惊讶,但数组的length属性不仅用于获取数组元素的数量,而且它还可写,并且可用于设置数组的长度{{3 }}。这将改变数组。

如果不再需要当前阵列而你不关心不变性或者不想分配内存,即最快的方式是

arr.length = n

清空一个数组

arr.length = 0

答案 3 :(得分:9)

不要尝试使用地图功能。应使用Map函数将值从一个事物映射到另一个事物。当输入和输出的数量匹配时。

在这种情况下,使用过滤器功能,该功能也可在阵列上使用。当您想要选择性地获取加工某些标准的值时,使用过滤器功能。然后你可以编写像

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

答案 4 :(得分:5)

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

_.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);
// => []

答案 5 :(得分:2)

以下内容对我有用。

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

答案 6 :(得分:2)

使用一个简单的示例:

$Subfolder=Get-location
$Fullname=(Split-path $Subfolder -Leaf).ToString();
$di=$Fullname.IndexOf("-");
$Fnametoend=$Fullname.SubString($di);
$Fnametoend=$Fnametoend.TrimStart("-")

foreach($dir in $Subfolder){
    $path=$Subfolder
    $dir
        Get-Childitem -Path $path -Filter "*.jpeg" -File |
            Group-Object -Property @{Expression = {$_.Fnametoend}}|
            ForEach-Object {
                $dir=$Fnametoend
                $nr=1
                foreach($file in $_.Group){
                    $file | Rename-item -Newname("{0}_2020_{1}.jpeg"-f $dir, $nr++)
                }
        }
}

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

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

输出:[“ b”]

注意:var letters_12 = letters.slice(1, 2); console.log(letters_12) 仅提供 shallow 副本,修改原始数组。

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

使用https://github.com/Siderite/LInQer,您可以进行Enumerable.from(list).take(3).toArray();

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:0)

使用https://www.npmjs.com/package/manipula,您可以按照LINQ样式进行操作:

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

答案 11 :(得分:0)

试试这个从列表中获取第一个 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

答案 12 :(得分:0)

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

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