我正在尝试检查一个数组,看看是否只有一个元素有数据。例如,这是我的数组:
playersByGender = {
mens: [],
womens: [],
other: []
};
这些组合中的任何组合都可以包含数据。如果只填写一个布尔值,我将如何检查所有三个并返回布尔值?
我想过使用foreach但是你无法在一个物体上做到这一点。
任何帮助都会很棒,谢谢!
答案 0 :(得分:3)
使用keys迭代对象的Array#reduce,并为每个长度为>的数组进行迭代。 0,将{1}添加1。比较最终总和得到布尔答案。
sum

答案 1 :(得分:2)
phaa<-str_replace_all(sa, "[|]", "/ ")
saah<- strsplit(phaa, " ")
&#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:
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;
超过1:
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;
修改强>
我更改了上面的解决方案以匹配您在只有当数组的 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来支持。