indexOf可以在更新数组上工作吗?

时间:2017-06-15 13:02:46

标签: javascript

understand that there are ways获取数组中的唯一元素。这个问题并不是在问这个问题。这个问题询问为什么indexOf返回-1以及"羽衣甘蓝"一旦已添加,就在unique_vegetables数组中。是否有indexOf的某些内容使其在这种情况下无效?

    var vegetables = ["kale", "broccoli", "kale"];

    function produce(){
       var unique_vegetables = [];
       unique_vegetables = vegetables.map(function(v){
        if (v.length > 0){  //irrelevant check to make sure the string has characters
             var k = unique_vegetables.indexOf(v);
            return k < 0 ? v : null;
        }else {
             return null;
        }
       })
       return unique_vegetables;
    }

    var t = produce();
    console.log(t, "unique vegetables")  ///  ["kale", "broccoli", "kale"]

https://jsfiddle.net/mjmitche/g6nn9nn6/

2 个答案:

答案 0 :(得分:2)

当您使用Array.map时,有3件事情可以构成一个整体。

  • 回调功能
  • 在回调中返回语句
  • .map
  • 返回

Callback是将在每次迭代时调用的函数,并将传递3个参数,即currentElement,index和数组本身。

Return from callback将在返回数组中初始化此迭代的值。此返回数组是.map中的本地数组,您无法访问。

Return from map是返回上一步中指出的已解析本地数组的最后一步。

在简单的实现中,

Array.map看起来像这样:

function myMap(arr, callback){
  var temp = [];
  for(var i = 0; i< arr.length; i++){
    temp[i] = callback(arr[i], i, arr);
  }
  return temp;
}

var a = [1,2,3,4,5];
var b = myMap(a, function(n, i, a){ return n * 2 })
console.log(b)

参考

答案 1 :(得分:0)

vegetables.forEach(function(v){
    if (v.length > 0){ 
         var k = unique_vegetables.indexOf(v);
        if(k < 0) unique_vegetables.push(v);
    }
})

unique_vegetables是一个空数组,直到map函数完成并返回,因此你需要在迭代时更改unique_vegetables。