按参数过滤数组

Filtering array by parameter

我有一个数组:

const submissions = [
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah blah',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah blah',
    isCorrect: true,
    isEssayQuestion: true
  },
  {
    question: 'True or False: I am new to JS.',
    response: 'True',
    isCorrect: true,
    isEssayQuestion: false
  }
];

该函数接受提交数组和一个布尔参数。

function filterQuestionsByType(submissions, essayquestion) {

  let trueEssay = [];
  let falseEssay = []; 

  for (let i = 0; i < submissions.length; i++) {
    if ( essayquestion === true) {
      if ( submissions[i].isEssayQuestion === true) {
        trueEssay.push(submissions[i]);
      } else {
        falseEssay.push(submissions[i]);
      }
    } 
  }

  if (essayquestion === true) {
    return trueEssay;
  } else {
    return falseEssay;
  }
}

如果为 true,我需要 return 一个数组,其中包含 isEssayQuestion 为 true 的所有条目。如果为假,则相同。它适用于 true 但不是 false。想法?

Array.prototype.filter() 完全符合目的:

const src = [{question:'blah blah blah ?',response:'blah blah blah',isCorrect:true,isEssayQuestion:false},{question:'blah blah blah blah',response:'blah blah blah',isCorrect:true,isEssayQuestion:false},{question:'blah blah blah ?',response:'blah blah blah blah',isCorrect:true,isEssayQuestion:true},{question:'True or False: I am new to JS.',response:'True',isCorrect:true,isEssayQuestion:false}],

    filterQuestionsByType = (submissions, essayquestions) => 
      submissions.filter(({isEssayQuestion}) => isEssayQuestion == essayquestions)
      
console.log(filterQuestionsByType(src, true))

好吧,就用.filter这个案例的方法

const submissions = [
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah blah',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah blah',
    isCorrect: true,
    isEssayQuestion: true
  },
  {
    question: 'True or False: I am new to JS.',
    response: 'True',
    isCorrect: true,
    isEssayQuestion: false
  }
];

function essays(essay, question) {
   return essay.filter(({isEssayQuestion}) => isEssayQuestion === question)
}

console.log(essays(submissions, false));
console.log("------------------------------------");
console.log(essays(submissions, true));

这是另一种方法。您可以简单地将 source-array 映射到新对象属性 (sortedValues) 并将结果写入。此方法仅 运行 一次,而不是其他示例,您需要 运行 两次 - 真假。

const submissions = [
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah blah',
    response: 'blah blah blah',
    isCorrect: true,
    isEssayQuestion: false
  },
  {
    question: 'blah blah blah ?',
    response: 'blah blah blah blah',
    isCorrect: true,
    isEssayQuestion: true
  },
  {
    question: 'True or False: I am new to JS.',
    response: 'True',
    isCorrect: true,
    isEssayQuestion: false
  }
];

const sortedValues = {
  trueValues: [],
  falseValues: []
}


submissions.map(item => {
  sortedValues[`${item.isEssayQuestion}Values`] = [...sortedValues[`${item.isEssayQuestion}Values`], item]
})

console.log(JSON.stringify(sortedValues, 2,2))