2013-08-28 18 views
1

我發現了一個解決方案,在那裏我得到返回的元素的數組沒有重複:Javascript - 當兩個數組中的元素相同時做些什麼?

Array1 = Array1.filter(function(val) { 
    return Array2.indexOf(val) == -1; 
}); 

不過,我想修改這個代碼只是一點點。我不想在沒有重複的情況下返回一個數組,而是想在重複時執行某些操作。問題是,我不確定此代碼的工作原理。事情是我不知道val如何設置,甚至它是什麼。

for (var i = 0; i < json.length; i++) { 
    var item = json[i]; 
    // if json.indexOf(val?), do something 
} 

回答

0

valArray.prototype.filter,它調用陣列中的每個元件上的回調函數設定。既然你不希望過濾您可以用Array.prototype.forEach代替,這也調用回調函數一次爲數組中的每個元素:

Array1.forEach(
    // This function is called once per element in Array1 
    function(val){ 
    if(Array2.indexOf(val) != -1){ // Check if that element is also in Array2 
     // `val` is in both arrays, 
     // Do something with it 
    } 
    } 
); 
1

閱讀docs for the Array filter method即可。回調的val參數將被傳遞的單一陣列項目,即json[i]item你的情況:

for (var i = 0; i < json.length; i++) { 
    var item = json[i]; 
    if (json.indexOf(item) >= 0) { 
     // do something 
    } 
} 
0

你可以利用一些現代的圖書館...像underscorejs。

交集就是你要找什麼,因爲我想:http://underscorejs.org/#intersection

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); 
=> [1, 2] 

所以,你的代碼可能類似於

if(_.insersection(arr1, arr2)){ 
    //since [] array is Falsy in JS this will work as a charm 
} 
0

MDN: indexOf

返回第一個索引給定的元素可以在數組中找到,如果不存在則返回-1。

MDN: filter

創建與通過由提供的功能實現的測試中所有元素的數組。當在array1項目在數組2(== -1)未找到

第一功能的工作原理是返回true。即:通過一個迭代,並添加任何東西B.

所以沒有發現,要改變只返回重複的東西都在這兩個發現返回true

Array1 = Array1.filter(function(val) { 
    return Array2.indexOf(val) >= 0; 
}); 

數組1現在只包含重複的項目。

1
var newArray = array1.filter(function(v, i) { 
    return array1.indexOf(v) == i; 
}); 

這將只從array1返回唯一的itesm;

array1.filter(function(v, i) { 
    // write your code here ('v' is individual value and 'i' is its index) 
    // don't return any anything if you don't want unique array to be returned. 
    // 'array1.indexOf(v) == i' checks if current value is duplicate from previous any values. 
    // try putting console.log on values you don't understand like (console.log(v,i) for values of 'v' and 'i') 
    return array1.indexOf(v) == i; 
}); 

和關閉詛咒可以循環使用for循環數組作爲

for(i in array1){ 
    // where i is index of array1, to get current value use array1[i] 
    if(array2.indexOf(array1[i]) >= 0){ 
     // do something 
    } 
    console.log(i); 
} 
相關問題