【问题标题】:Validate if an object is not in array of object and throw in js验证对象是否不在对象数组中并在js中抛出
【发布时间】:2020-08-06 15:44:14
【问题描述】:

我有一个对象来验证对象数组中的任何一个是否不相同

const obj = {
    question: "What is your dog name?",
  answer: "Browny"
}

const array = [
  {
    question: "What is your name?",
    answer: "Diana"
  },
  {
    question: "What is your dog name?",
    answer: "Browny"
  }
]

我尝试过滤和比较它们,但它只检查第一个 obj

array.filter(arr => {
  if (arr.question !== obj.question) response.status(409).json({message: 'Wrong question chosen'}) 
  if (arr.answer !== obj.answer) response.status(409).json({message: 'Please type the right answer'})

  else response.status(200)
})

我查看了这个JS: Filter array of objects by array, when object key is an array of objects,但它让我有点困惑

希望大家能帮帮我,先谢谢了!

【问题讨论】:

  • 对象比较基于对象标识。两个不同的对象,即使它们包含相同的属性名称和属性值,也永远不会相互===
  • filter 应该返回一个与调用它的数组相同类型的数组。任何其他行为都是出乎意料的,并且可能会导致错误。似乎您不想过滤太多,而是检查数组中的任何元素是否与您的示例相同。

标签: javascript node.js ecmascript-6


【解决方案1】:

Ciao,你可以按照这个例子:

const obj = {
    question: "What is your dog name?",
  answer: "Browny"
};

const array = [
  {
    question: "What is your name?",
    answer: "Diana"
  },
  {
    question: "What is your dog name?",
    answer: "Browny"
  }
];

let correct_answer = array.filter(el => el.question === obj.question)[0];


if (correct_answer.answer === obj.answer) console.log("correct answer");
else console.log("wrong answer");

所以你的代码变成了:

let correct_answer = array.filter(arr => arr.question === obj.question);

if (correct_answer.length === 0) response.status(409).json({message: 'Wrong question chosen'}) 
else {
   if (correct_answer[0].answer === obj.answer) response.status(200);
   else response.status(409).json({message: 'Please type the right answer'});
}

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    相关资源
    最近更新 更多