如何在嵌套数组上使用include()函数?

时间:2017-04-20 06:40:47

标签: javascript jquery arrays

我有一个这样的数组:

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()函数?

3 个答案:

答案 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)

只需迭代数组并更新值(如果找到),否则按下新值

<强>演示

&#13;
&#13;
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;
&#13;
&#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