我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"]
答案 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。