【问题标题】:how to return boolean value based on condition check in array object javascript如何根据数组对象javascript中的条件检查返回布尔值
【发布时间】:2020-10-19 07:17:00
【问题描述】:

我有对象数组 obj1, obj2,

如果对象名不能有All键名返回true

如果对象名只能有一个All键名,其他对象返回false

如果对象名只能有一个All键名且没有其他对象返回true

如果对象的名字有太多的键名All返回false

基于以上条件如何在javascript中做。

function checkObj(ob){
  var result = ob.filter(e=>e.name=="All");
  if(result.length !== 1){
    return false;
  }
  else{
    return true;
  }
}

var  obj1=[
  {id:1, name: "All", value:"all"},
  {id:2, name: "Sun", value:"sun"},
  {id:3, name: "Mon", value:"mon"},
]

var  obj2=[
  {id:4, name: "Thur", value:"thur"},
  {id:8, name: "Mon", value:"mon"},
]

var  obj3=[
  {id:1, name: "Thur", value:"thur"},
  {id:5, name: "All", value:"all"},
  {id:2, name: "Mon", value:"mon"},
  {id:6, name: "All", value:"all"}
]

var obj4=[
{id:1, name: "All", value:"all"}
]

var r1= this.checkObj(obj1);
var r2=this.checkObj(obj2);
var r3=this.checkObj(obj3);
var r4=this.checkObj(obj4);

Expected Output:

false
true
false
true

【问题讨论】:

标签: javascript arrays loops object


【解决方案1】:

您可以使用 Array#every 短路超过 1。

function checkArray(array) {
    return array.every((count => ({ name }) => (count += name === "All") < 2)(0));
}

var array1 = [{ id: 1, name: "All", value: "all" }, {  id: 2, name: "Sun", value: "sun" }, { id: 3, name: "Mon", value: "mon" }],
    array2 = [{ id: 4, name: "Thur", value: "thur" }, { id: 8,  name: "Mon", value: "mon" }],
    array3 = [{ id: 1, name: "Thur", value: "thur" }, { id: 5, name: "All",  value: "all" }, { id: 2, name: "Mon",  value: "mon" }, { id: 6, name: "All", value: "all" }];

console.log(checkArray(array1), checkArray(array2), checkArray(array3));

【讨论】:

  • 如果只有一个All 存在并且其他对象返回false,如何检查,谢谢
  • 函数外需要count变量:let count = 0; array.every(({ name }) =&gt; (count += name === "All") &lt; 2); return count === 1;
【解决方案2】:

您可以使用name = "All"检查数组是否有任何对象。

那么,return true 如果

  • 数组有name = "All"对象,数组长度为1
  • 或数组没有name = "All"
function checkObj(arr) {
  const hasAll = arr.some(o => o.name === "All")
  return (arr.length === 1 && hasAll) || !hasAll
}

这是一个sn-p:

function checkObj(arr) {
  const hasAll = arr.some(o => o.name === "All")
  return (arr.length === 1 && hasAll) || !hasAll
}

const obj1=[{id:1,name:"All",value:"all"},{id:2,name:"Sun",value:"sun"},{id:3,name:"Mon",value:"mon"},],
    obj2=[{id:4,name:"Thur",value:"thur"},{id:8,name:"Mon",value:"mon"},],
    obj3=[{id:1,name:"Thur",value:"thur"},{id:5,name:"All",value:"all"},{id:2,name:"Mon",value:"mon"},{id:6,name:"All",value:"all"}],
    obj4=[{id:1,name:"All",value:"all"}];

console.log( checkObj(obj1) )
console.log( checkObj(obj2) )
console.log( checkObj(obj3) )
console.log( checkObj(obj4) )

【讨论】:

  • 如果只有一个 All present 并且有其他对象返回 false,如何检查,谢谢
  • @codecat 您问题中的第 2 点和第 3 点有什么区别? "如果对象名只能有一个 All key name 而其他对象返回 false。如果对象名只能有一个 All key name 而没有其他对象返回 true"。我不明白其中的区别
  • 感谢回复,已添加obj4 示例“如果对象的名称只能有一个所有键名且没有其他对象返回true”obj1 示例“。如果名称of object 只能有一个 All 键名,没有其他对象返回 true"
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 2016-01-27
  • 1970-01-01
  • 2011-12-08
  • 2018-10-17
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多