以下是我要实施OR
return bigData.country==["US"||"JP"] && (bigData.description=="iPhone 4S")
[A
||
B||
C||
...]&&
[X||
Y||
Z||
....]
如上所示,如果对象bigData.country
的键值为US
或JP
,AND
bigData.description
,我将返回对象是iPhone 4S
,也可以是更多设备。
我能够通过
获得所需的结果return (bigData.country=="US"||bigData.country=="JP") && (bigData.description=="iPhone 4S")
但是,由于我可以方便地添加和删除数组,我正在尝试使用数组。建议使用不同的东西。
如果您想在我的代码中使用 REPL
答案 0 :(得分:3)
您可以像这样使用Array.prototype.indexOf
(!= -1
}:
return ["US", "JP"].indexOf(bigData.country) !== -1 && ["X", "Y", "Z"].indexOf(bigData.description) !== -1;
或者在ES6中,您可以使用Array.prototype.includes
,如:
return ["US", "JP"].includes(bigData.country) && ["X", "Y", "Z"].includes(bigData.description);
答案 1 :(得分:2)
使用数组:
return ['US','JP'].indexOf(bigData.country) >= 0 &&
['iPhone 4S'].indexOf(bigData.description) >= 0;
使用对象(可能性能更好):
return {'US': true,'JP': true}[bigData.country] &&
{'iPhone 4S': true}[bigData.description];
正如@ibrahim mahrir所指出的,对象方法并不总是有效。例如,如果bigData.country=='toString'
。这是因为Javascript对象带有默认Object
原型的默认方法。在现实世界的场景中,与此问题发生冲突的可能性微不足道,但如果你真的想要这么做,有两种选择:
1 - 使用hasOwnProperty()
:
return {'US': true,'JP': true}.hasOwnProperty(bigData.country) &&
{'iPhone 4S': true}.hasOwnProperty(bigData.description);
2 - 使用没有原型的对象。这样设置起来比较冗长,但使用起来也比较方便。您还可以编写一个简单的方法,将常规对象转换为无原型对象。
var countries = new Object(null);
countries['US'] = true;
countries['JP'] = true;
var descriptions = new Object(null);
descriptions['iPhone 4S'] = true;
return countries[bigData.country] &&
descriptions[bigData.description];
答案 2 :(得分:1)
const countriesToKeep = new Set(['GP', 'US']);
console.log(countriesToKeep.has('UK'));
console.log(countriesToKeep.has('GP'));

答案 3 :(得分:1)
使用Array.prototype.includes
很可能就是你所追求的:
let valid = {
countries: ['US', 'JP'],
description: 'iPhone 4S'
};
let dataset = [{
country: 'US',
description: 'iPhone 4S',
expected: true
}, {
country: 'JP',
description: 'iPhone 4S',
expected: true
}, {
country: 'AA',
description: 'iPhone 4S',
expected: false
}, {
country: 'US',
description: 'iPhone',
expected: false
}]
// iterate over data values
dataset.forEach(data => {
let is_valid = valid.countries.includes(data.country) && valid.description == data.description;
console.log(
`Country:"${data.country}"`,
`Description:"${data.description}"`,
`Expected:${data.expected}`,
`Got:${is_valid}`
);
});
答案 4 :(得分:1)
您可以像这样使用 Array#some()
method :
<强> ES6:强>
return ['US','JP'].some(val => bigData.country === val) && ['iPhone 4S'].some(v => bigData.description === v);
<强> ES5:强>
return ['US','JP'].some(function(val){return bigData.country === val}) && ['iPhone 4S'].some(function(v){return bigData.description === v});
<强>演示:强>
let bigData = {
country: 'JP',
description: 'iPhone 4S'
};
console.log(['US', 'JP'].some(val => bigData.country === val) && ['iPhone 4S'].some(v => bigData.description === v));
&#13;
答案 5 :(得分:1)
您可以使用对象作为测试的数据结构:
var countries = {
US: true,
JP: true
};
return countries[bigData.country] && ...