2017-04-20 56 views
3

我有一個這樣的數組:如何在嵌套數組上使用include()函數?

var arr = []; 
arr = [['red', 685], ['green', 210], ['blue', 65]]; 

我也有兩個變量:

var color = 'blue'; 
var number = 21; 

所有我想要做的是檢查的arr然後每個嵌套數組的第一個項目無論是更新它的第二個項目或爲它創建一個新的數組。

下面是一些例子:

輸入:

var color = 'blue'; 
var number = 21; 

預期輸出:

arr = [['red', 685], ['green', 210], ['blue', 21]]; 

輸入:

var color = 'yellow'; 
var number = 245; 

預期輸出:

arr = [['red', 685], ['green', 210], ['blue', 21], ['yellow', 245]]; 

這是我到目前爲止已經試過:

if (!arr.includes(color)) { 
    arr.push([color, number]); 
} else { 
    arr[color] = time; 
} 

!arr.includes(color)條件是錯誤的。因爲arr的每個項目也是一個數組。無論如何,我怎麼能在嵌套數組的第一項上使用includes()函數呢?

+0

你只有一層嵌套嗎? –

+0

@Maximus。 。 .yes – stack

回答

3

不能在嵌套數組上直接使用includes,但是,可以在數組上使用find

arr.find(el => el[0] === color) 

這將返回數組的元素其他undefined。返回的值可用於更新數組中的第二個元素。

var arr = [ 
 
    ['red', 685], 
 
    ['green', 210], 
 
    ['blue', 65] 
 
]; 
 
var color = 'blue'; 
 
var number = 21; 
 

 

 
function upsert(array, color, number) { 
 
    var exists = arr.find(el => el[0] === color); 
 

 
    if (exists) { 
 
    exists[1] = number; 
 
    } else { 
 
    arr.push([color, number]); 
 
    } 
 
} 
 

 
upsert(arr, color, number); 
 
console.log(arr); 
 

 

 
var color = 'yellow'; 
 
var number = 245; 
 
upsert(arr, color, number); 
 
console.log(arr);

+0

你的方法看起來不錯..但是在我自己的例子中實現它有點模糊。 – stack

+0

@stack我添加了現場演示。 – Tushar

0

您應該製作一個循環遍歷數組,因爲正如您自己指出的那樣,數組中的每個元素本身都是一個數組。

如果你這樣做:

for(let i = 0; i < arr.length; i++){ 
    if (!arr[i].includes(color)) { 
     arr.push([color, number]); 
    } else { 
     arr[i][1] = time; 
    } 
} 

這樣,你正在檢查,如果在i位置數組的顏色,如果沒有你推一個新的陣列到陣列中,否則你改變數組值在陣列的索引1處i

1

簡單地遍歷數組,並更新值,如果找到,其他推新值

演示

var arr = [['red', 685], ['green', 210], ['blue', 65]]; 
 
console.log(updateArray(arr, 'blue', 21)); 
 

 
function updateArray(arr, color, value) 
 
{ 
 
    var isFound = false; 
 
    arr = arr.map(function(item){ 
 
    if(item[0] == color) 
 
    { 
 
     isFound = true; 
 
     item[1] = value; 
 
    } 
 
    return item; 
 
    }); 
 
    if (!isFound) 
 
    { 
 
    arr.push([color, value]); 
 
    } 
 
    return arr; 
 
}