【问题标题】:How to get boolean value if any item in array of arrays is true or false?如果数组数组中的任何项目为真或假,如何获取布尔值?
【发布时间】:2020-12-29 07:40:10
【问题描述】:

我有这个数组,它是用户生成并随时间变化的:

const data = [["2020-09-14","15:00","60","Info","April Tucker","Other","yes"],
["2020-09-14","2:00","50","Text","April Tucker","Other","yes"]]

用户选择一个保存到 sessionStorage 的日期(例如:2020-11-21): sessionStorage.getItem('date')

然后我使用 forEach 方法来知道数组 item 的第一项是否具有相同的值:

 const checkForConflicts = () => {
    mydata.forEach((element) => {
      element.includes(sessionStorage.getItem('date'))
    })
  }

如果我通过控制台记录我得到数组中所有项目的布尔值。 如何只返回一个布尔值,如果 checkForConflict 只返回 false 值,则返回 true,如果返回至少一个 true 值,则返回 false 值。

【问题讨论】:

  • “如何只返回一个布尔值,如果 checkForConflict 只返回假值,则返回真值,如果返回至少一个真值,则返回假值。” - 但checkForConflict 没有返回任何东西......
  • 请查看Array.prototype.everyArray.prototype.some。这应该使您能够选择正确的工具。

标签: javascript arrays


【解决方案1】:

可能是Array.prototype.everyArray.prototype.some 中的一个或两者都为您提供了合适的工具。

...简化示例代码...

const data = [
  ["2020-09-14","15:00","60","Info","April Tucker","Other","yes"],
  ["2020-09-14","2:00","50","Text","April Tucker","Other","yes"]
];

console.log(
  'data.every(item => item[0] === "2020-09-14") ? ',
  data.every(item => item[0] === "2020-09-14")
);
console.log(
  'data.some(item => item[0] === "2020-09-14") ? ',
  data.some(item => item[0] === "2020-09-14")
);

data.push(
  ["2020-09-15","2:00","50","Text","April Tucker","Other","yes"]
);

console.log(
  'data.every(item => item[0] === "2020-09-14") ? ',
  data.every(item => item[0] === "2020-09-14")
);
console.log(
  'data.some(item => item[0] === "2020-09-14") ? ',
  data.some(item => item[0] === "2020-09-14")
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

【讨论】:

    【解决方案2】:

    试试 some() 方法:

    const checkForConflicts = () => {
        mydata.forEach((element) => {
          element.some(!sessionStorage.getItem('date'))
        })
      }

    【讨论】:

      【解决方案3】:

      你不需要使用 forEach 和循环数据 您可以找到冲突项目的索引 -1 表示它们没有冲突

      const checkForConflicts = () => {
          return data.findIndex((element) => {
            element.includes(sessionStorage.getItem('date'))
          }) !== -1;
        }
      

      最重要的是你必须在函数中返回值。

      【讨论】:

        【解决方案4】:

        我会建议一个对象数组,如果不是,请更改此代码以查看数组数组中的第一个元素。请注意,我用本地替换了我的测试,以简单的方式在此处显示它,而不是 sessionStorage

        const data = [{
            date: "2020-09-14",
            time: "15:00",
            somenumber: "60",
            cheers: "Info",
            name: "April Tucker",
            "note": "Other",
            says: "yes"
          },
          {
            date: "2020-09-14",
            time: "15:00",
            somenumber: "60",
            cheers: "Info",
            name: "Fred Tucker",
            "note": "Other",
            says: "yes"
          },
          {
            date: "2020-09-13",
            time: "2:00",
            somenumber: "50",
            cheers: "Text",
            name: "April Tucker",
            "note": "Other",
            says: "yes"
          }
        ];
        let testdate = "2020-09-14";
        let testdate2 = "2020-09-19";
        const checkForConflicts = (item, testme) => {
          // compare as dates to forgive formatting etc.
          return (new Date(item).getTime() === new Date(testme).getTime())
        };
        
        // I used .filter in case you need to know how many conflicts but .some() might work also
        let hasConflict = !!data.filter(x => checkForConflicts(x.date, testdate)).length;
        console.log(hasConflict);
        
        let conflictCount = data.filter(x => checkForConflicts(x.date, testdate)).length;
        console.log(conflictCount);
        
        let hasConflict2 = !!data.filter(x => checkForConflicts(x.date, testdate2)).length;
        console.log(hasConflict2);

        【讨论】:

          猜你喜欢
          • 2019-08-08
          • 2018-12-27
          • 2012-05-13
          • 2019-09-09
          • 2022-07-06
          • 2020-01-05
          • 1970-01-01
          • 2012-07-28
          相关资源
          最近更新 更多