【问题标题】:Filtering array by parameter按参数过滤数组
【发布时间】:2020-08-07 07:33:19
【问题描述】:

我有一个数组:

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;
  }
}

如果为真,我需要返回一个数组,其中包含 isEssayQuestion 为真的所有条目。如果是假的,也一样。它会为真但不是假的。想法?

【问题讨论】:

    标签: javascript arrays boolean


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在这种情况下,只需使用.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));

      【讨论】:

        【解决方案3】:

        这是另一种方法。您可以简单地将源数组映射到新对象属性(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))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-20
          • 2021-08-27
          • 2017-05-01
          相关资源
          最近更新 更多