检查对象中是否只有一个数组具有值

时间:2018-01-22 19:55:10

标签: javascript arrays typescript object

我正在尝试检查一个数组,看看是否只有一个元素有数据。例如,这是我的数组:

playersByGender = {
  mens: [],
  womens: [],
  other: []
};

这些组合中的任何组合都可以包含数据。如果只填写一个布尔值,我将如何检查所有三个并返回布尔值?

我想过使用foreach但是你无法在一个物体上做到这一点。

任何帮助都会很棒,谢谢!

5 个答案:

答案 0 :(得分:3)

使用keys迭代对象的Array#reduce,并为每个长度为>的数组进行迭代。 0,将{1}添加1。比较最终总和得到布尔答案。



sum




答案 1 :(得分:2)



phaa<-str_replace_all(sa, "[|]", "/ ")
saah<- strsplit(phaa, " ")
&#13;
&#13;
&#13;

let playersByGender = { mens: [], womens: [1,1], other: [] }; console.log(Object.values(playersByGender).filter(a => a.length > 0).length === 1);返回所有对象值的数组,然后我们只留下填充的数组并计算它们:Object.values

答案 2 :(得分:0)

您正在寻找与for in相对的foreach循环。使用for in循环,您可以查看对象属性,测量长度并返回任何对象的数组是否有长度。

仅限1:

&#13;
&#13;
var playersByGender = {
    mens: [1],
    womens: [],
    other: []
  },
  oneArrayLength = false;

for(var key in playersByGender) {
  if(playersByGender.hasOwnProperty(key)) {
    if(playersByGender[key].length) {
      if(!oneArrayLength) {
        oneArrayLength = true;
      } else {
        oneArrayLength = false;
        break;
      }
    }
  }
}

console.log(oneArrayLength);
&#13;
&#13;
&#13;

超过1:

&#13;
&#13;
var playersByGender = {
    mens: [1],
    womens: [1],
    other: []
  },
  oneArrayLength = false;

for(var key in playersByGender) {
  if(playersByGender.hasOwnProperty(key)) {
    if(playersByGender[key].length) {
      if(!oneArrayLength) {
        oneArrayLength = true;
      } else {
        oneArrayLength = false;
        break;
      }
    }
  }
}

console.log(oneArrayLength);
&#13;
&#13;
&#13;

修改

我更改了上面的解决方案以匹配您在只有当数组的 1 具有值时才返回true的问题中描述的内容。

答案 3 :(得分:0)

你确实可以像这样使用for..in循环:

function oneArrayHasData(arr) {
  var dataExists = false;
  for (var prop in arr) {
    if (playersByGender[prop].length) dataExists = true;
  }
  return dataExists;
}

var dataFound = oneArrayHasData(playersByGender);

答案 4 :(得分:0)

你可以循环遍历数组,查看每个数组中的数量,然后过滤掉那些没有的数组,然后计算它们。正如其他人所提到的,有很多方法可以做到这一点。我认为所有的答案都显示了你如何做到这一点的不同方法。您应该熟悉Arrays可用的所有方法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

这是另一个解释选项:

let arraysWithMoreThanOne = Object.keys(playerByGender).map(function(key) {
  // starting with an array of keys men, women, other
  // the map method allows us to convert the key into something else.
  // in this case, the length of the array
  // we only care about the lengths
  return playersByGender[key].length;
}).filter(function(count) {
   // filter allows us to discard item in an array we don't care about
   // we only care if they have more than 1 in them
   return count > 0;
}) // at the end, we have converted the object into a different result
.length; // this is the number of arrays that had more than one item

根据您的环境,某些方法需要使用polyfill来支持。