使用if / else匹配包含rgb颜色值的两组数组

时间:2018-02-12 17:42:28

标签: javascript arrays if-statement

所以我可以使用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);

1 个答案:

答案 0 :(得分:0)

此方法使用函数reduce对匹配进行求和。

&#13;
&#13;
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;
&#13;
&#13;

for-loop

&#13;
&#13;
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;
&#13;
&#13;