所以我可以使用rgb颜色值创建一个数组,例如:
var atomArr = ['rgb(255,255,255)','rgb(255,34,0)','rgb(255,34,0)'];
在进入细节之后,我甚至可以使用数组中的值指定对象的背景颜色。
那么为什么我不能采用两个相似的数组并检查它们是否匹配(有序匹配不是必需的,但两个数组必须包含相同的值)?
在下面的示例中,两个数组具有完全相同的值(不按顺序),但始终触发false。
var h2o = ['rgb(255, 255, 255)', 'rgb(255, 34, 0)', 'rgb(255, 34, 0)'];
function Check(A) {
var atomArr = ['rgb(255, 34, 0)', 'rgb(255, 255, 255)', 'rgb(255, 34, 0)'];
var i, j;
var totalmatches = 0;
for (i = 0; i < atomArr.length; i++) {
for (j = 0; j < A.length; ++j) {
if (atomArr[i] === A[j]) {
totalmatches++;
}
}
}
if (totalmatches == 3) {
console.log("true");
} else {
console.log("false");
}
}
Check(h2o);
答案 0 :(得分:0)
此方法使用函数reduce
对匹配进行求和。
var h2o = ['rgb(255, 255, 255)', 'rgb(255, 34, 0)', 'rgb(255, 34, 0)'];
function Check(A) {
var atomArr = ['rgb(255, 34, 0)', 'rgb(255, 255, 255)', 'rgb(255, 34, 0)'];
var checked = true;
A.forEach((r) => {
if (!checked) return;
var count = A.reduce((a, c) => a + (c === r ? 1 : 0), 0);
var outerCount = atomArr.reduce((a, c) => a + (c === r ? 1 : 0), 0);
checked = checked && count === outerCount;
});
console.log(checked);
}
Check(h2o);
&#13;
for-loop
var h2o = ['rgb(255, 255, 255)', 'rgb(255, 34, 0)', 'rgb(255, 34, 0)'];
function Check(A) {
var atomArr = ['rgb(255, 34, 0)', 'rgb(255, 255, 255)', 'rgb(255, 34, 0)'];
var checked = true;
for (var i = 0; i < A.length; i++) {
if (!checked) break;
var r = A[i];
var count = A.reduce((a, c) => a + (c === r ? 1 : 0), 0);
var outerCount = atomArr.reduce((a, c) => a + (c === r ? 1 : 0), 0);
checked = checked && count === outerCount;
};
console.log(checked);
}
Check(h2o);
&#13;