检查对象中是否存在值?

时间:2018-07-15 14:52:01

标签: javascript arrays javascript-objects

我有些类似的东西

{
  "tasks": [
    {
      "name": "Task YES",
      "finished": false,
      "id": 1
    },
    {
      "name": "Task NO",
      "finished": false,
      "id": 2
    }
  ]
}

还有一些价值

let someValue = 'Task NO';

如何检查JSON中是否已经有值?

5 个答案:

答案 0 :(得分:3)

完成目标的一种方法是使用Array.prototype.find()

let task = tasks.find(task => task.name === someValue);

如果找到的任务与name的{​​{1}}相同,则someValue等于找到的任务。如果找不到任何内容,则task将是task

undefined

答案 1 :(得分:1)

这似乎是some的一项工作,它测试数组中的至少一个元素是否通过了提供的功能实现的测试。

let obj = {
  "tasks": [
    {
      "name": "Task YES",
      "finished": false,
      "id": 1
    },
    {
      "name": "Task NO",
      "finished": false,
      "id": 2
    }
  ]
}

console.log(obj.tasks.some(i => i.name == 'Task NO'))
console.log(obj.tasks.some(i => i.name == 'Task YES'))
console.log(obj.tasks.some(i => i.name == 'Task ABC123'))

答案 2 :(得分:0)

尝试以下功能:

function isValueExist(obj, value) {
  if (!(obj instanceof Object) && 'function' !== typeof obj) {
    return obj === value;
  }

  for (var prop in obj)  {
    if (isValueExist(obj[prop], value)) {
      return true;
    }
  }

  return false;
}

答案 3 :(得分:0)

JSON.parse reviver parameter可用于递归枚举,修改或排除值:

var someValue = 'Task NO', json = '{"tasks":[{"name":"Task YES","finished":false,"id":1},{"name":"Task NO","finished":false,"id":2}]}';

var obj = JSON.parse(json, function(key, value) {
  if (value == someValue) 
    console.log(`found: '${value}' at key '${key}'`);
  return value;                                           // optional if the result obj is needed
});

答案 4 :(得分:-1)

效率很低,但带有Boolean对象的hacky版本-))

Boolean(d.tasks.filter(e => e.name == "Task NO"))

编辑

已保存7个字节-))thanks to @Get Off My Lawn

!!d.tasks.filter(e => e.name == "Task NO")

另一个更新。

作为@Andreas commentedBoolean([])返回true。因此,答案应更新为

!!d.tasks.filter(e => e.name == "Task NO").length