我有一个这样的数组:
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 :(得分:4)
您无法在嵌套数组上直接使用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);

答案 1 :(得分: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;
}
&#13;
答案 2 :(得分: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