对于数组元素上的简单数组迭代操作,这是最有效的

时间:2015-09-15 19:05:18

标签: javascript arrays

所有

假设我有一个对象数组,每个对象都有值attr。 我想做的是:

循环遍历数组并删除值小于1的对象

我想过使用splice或创建另一个数组,将值> gt = 1的那些数据推入其中然后返回新数组,我想知道哪种方式更好?还是其他任何有效的方式?

谢谢

4 个答案:

答案 0 :(得分:2)

如果您想保持原始数组的完整性:

arr.filter(function(elem) {
  return elem.value >= 1;
})

我对你的问题的阅读使我明白每个数组元素都有value属性。相反,如果每个元素只是被比较的实际值,则将“elem.value”替换为“elem”。

[UPDATE]

基于jsperf comparison,如果您可以修改原始数组,@ NicholasHazel答案中提出的splice方法实际上要快一个数量级。

我甚至尝试了第三种方法,使用slice()首先制作原始数组的副本,然后在副本上使用splice(),但这比其他方法慢得多。

答案 1 :(得分:1)

内部拼接正在做一个新的数组,所以在幕后你将为你想要删除的每个对象创建一个新的数组。这意味着创建一个数组推送到它只有想要的对象比拼接更有效。

答案 2 :(得分:1)

为了提高效率,splice将是您最理想的性能解决方案。 只要你不再需要初始数组,我就会完全转换变量。

var array = [-5,-4,-3,-2,-1,0,1,2,3,4,5];

for(var i=array.length-1; i>=0; i--){
    if(array[i] < 1) {
        array.splice(i,1);
    }
}

如果您确实需要在以后使用初始阵列,那么推送到新阵列是最好的选择:

var array = [-5,-4,-3,-2,-1,0,1,2,3,4,5];
var newArray = [];

for(var i=array.length-1; i>=0; i--){
    if(array[i] < 1) {
        newArray.push(array[i]);
    }
}

两者都是完全合理的解决方案。

答案 3 :(得分:1)

From the question if you are talking about array of object below is the solution which will keep intact the original array and its more efficient as well.

Use delete operator which will put undefined on indexes which have value<=1

What delete operator actually does, check with example at below link inside heading :Adding/Deleting array elements

http://www.thesstech.com/javascript/arrays

foreach循环的参考可以在以下位置找到: http://www.thesstech.com/javascript/array_foreach_method

<!doctype html>
<html>
  <head>
    <script>

        var obj1 = {value:0};
        var obj2 = {value:10};     

        var arr = [obj1,obj2]; 

          arr.forEach(function(x,counter,arr){
                 if (arr[counter].value<=1)
                    delete arr[counter];
              }
           );
         arr.forEach(function(x,counter,arr){
               document.write(arr[counter].value);
               }
          );


    </script>
  </head>
</html>
相关问题