Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于现有数组和对象构造新的对象数组_Javascript_Arrays_Object - Fatal编程技术网

Javascript 基于现有数组和对象构造新的对象数组

Javascript 基于现有数组和对象构造新的对象数组,javascript,arrays,object,Javascript,Arrays,Object,可能是犯了一个愚蠢的错误,但我似乎无法理解这一点 基于现有的字符串数组,我想检查它们是否作为对象值存在于我的对象数组中。如果为true,则使用true值将它们推入新数组;如果为false,则也使用false值将它们推入新数组 到目前为止,我的代码示例如下: const answers = [12, 3, 16] const quotes = [ { id: 12, author: 'A'}, { id: 4, author: 'B'}, { id: 16, author: 'C'}, ]

可能是犯了一个愚蠢的错误,但我似乎无法理解这一点

基于现有的字符串数组,我想检查它们是否作为对象值存在于我的对象数组中。如果为true,则使用true值将它们推入新数组;如果为false,则也使用false值将它们推入新数组

到目前为止,我的代码示例如下:

const answers = [12, 3, 16]
const quotes = [
{ id: 12, author: 'A'}, 
{ id: 4, author: 'B'}, 
{ id: 16, author: 'C'},  
]
这会将对象推送到我的新阵列,一切都很好!问题是当我想添加错误的时候。我试着按照以下方式来做:

answers.forEach((answer) => {
    quotes.find((quote) => (quote.id === answer
      ? checkedQuotes.push({
        id: quote.id,
        author: quote.author,
        correct: true,
      })
      : checkedQuotes.push({
        id: quote.id,
        author: quote.author,
        correct: false,
      })
    ));
  });

returns => [
  {id:12, author: 'A', correct: true}, 
  {id:12, author: 'A', correct: false}, 
  {id:12, author: 'A', correct: false}
]

// would expect it to be: 
[
  {id:12, author: 'A', correct: true}, 
  {id:4, author: 'B', correct: false}, 
  {id:16, author: 'C', correct: true}
]


我在这里遗漏了什么?

我认为您需要通过引号而不是答案进行循环,然后查看答案中的引号是否有匹配值

const answers=[12,3,16];
常量引号=[
{id:12,作者:'A'},
{id:4,作者:'B'},
{id:16,作者:'C'},
];
const res=quotes.map(
(quote)=>({…quote,正确:answers.includes(quote.id)})
);

控制台日志(res)这里是一个最小数量循环的答案

  • 使用
    reduce
    从应答数组-
    {'value':true}
    创建一个对象
  • 循环浏览答案,同时检查在第1点中创建的对象中的答案是否正确
  • const answers=[12,3,16]
    常量引号=[
    {id:12,作者:'A'},
    {id:4,作者:'B'},
    {id:16,作者:'C'},
    ]
    const answersObj=answers.reduce(函数(obj,answer){
    obj[答案]=正确;
    返回obj;
    }, {});
    对于(引用的报价){
    quote['correct']=answersObj[quote.id]| | false;
    }
    console.log(引号)
    answers.forEach((answer) => {
        quotes.find((quote) => (quote.id === answer
          ? checkedQuotes.push({
            id: quote.id,
            author: quote.author,
            correct: true,
          })
          : checkedQuotes.push({
            id: quote.id,
            author: quote.author,
            correct: false,
          })
        ));
      });
    
    returns => [
      {id:12, author: 'A', correct: true}, 
      {id:12, author: 'A', correct: false}, 
      {id:12, author: 'A', correct: false}
    ]
    
    // would expect it to be: 
    [
      {id:12, author: 'A', correct: true}, 
      {id:4, author: 'B', correct: false}, 
      {id:16, author: 'C', correct: true}
    ]