我有以下代码将array1与array2进行比较,以确定array1是否缺少array2的值:
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
var isMissing = false;
console.log(missing(array1, array2));
function missing(a,b) {
if (a > b) {
var length = a.length;
} else if (b > a) {
var length = b.length;
} else {
var length = a.length;
}
for (var i = 0; i < length; i++ ) {
if (b.indexOf(a[i]) == -1) {
isMissing = true;
} else {
isMissing = false;
}
if (isMissing == 'true') {
break;
}
}
return isMissing;
}
以上内容并非始终有效。有关方案和结果与预期结果,请参见下表:
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: false
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: true
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank', 'janet']; // result:false, expected: true
var array1 = ['frank', 'george'];
var array2 = ['frank', 'frank']; // result: false, expected: true
我不确定是什么问题...
我已经读过this thread,但对我没有任何帮助,因为我不需要知道缺少哪个元素,我只需要知道是否缺少一个元素即可。
请没有外部库。谢谢。
答案 0 :(得分:2)
# agent section
datadog:
build: datadog
links:
- redis # ensures that redis is a host that the container can find
- web # ensures that the web app can send metrics
environment:
- DD_API_KEY=34f-------63c
- DD_LOGS_ENABLED=true
- DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
- DD_AC_EXCLUDE="name:datadog-agent"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
- /opt/datadog-agent/run:/opt/datadog-agent/run:rw
答案 1 :(得分:1)
使用Array.prototype.some和Array.prototype.indexOf。
制作第一个数组的副本,然后遍历第二个数组的元素,然后在第一个数组中查找该元素(如果找到),将其删除,这样就不会被计算在内。
const missing = (arr1, arr2) => {
const left = [...arr1];
return arr2.some(x => {
const idx = left.indexOf(x);
if (idx >= 0) left.splice(idx, 1);
return idx < 0;
});
}
console.log(missing(['bob', 'george'], ['bob', 'george', 'frank'])); // true
console.log(missing(['bob', 'frank'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'george'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'bob', 'george'], ['bob', 'george', 'frank'])); // false
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank', 'janet'])); // true
console.log(missing(['frank', 'george'], ['frank', 'frank'])); // false
答案 2 :(得分:1)
我很难理解您希望倒数第二次测试是假的,但是您好像更新了它
console.log(missing(['bob', 'george'], ['bob', 'george', 'frank']) === true);
console.log(missing(['bob', 'frank'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'george'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'bob', 'george'], ['bob', 'george', 'frank']) === false);
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank', 'janet']) === true);
console.log(missing(['frank', 'george'], ['frank', 'frank']) === true);
function missing(a, b) {
var c = [].concat(a); // non-destructive
for (var i = 0; i < b.length; i++) {
var iO = c.indexOf(b[i]);
if (iO < 0) {
return true;
}
c.splice(iO, 1)
}
return false;
}
该函数,因为您只关心数组b
中没有的内容,因此遍历b并与数组a
比较,一旦找到丢失的项,则立即返回true
否则最后返回false
已更新以跟踪计数
答案 3 :(得分:0)
找到第二个数组中的第一个元素并将其删除。
function missing(a,b) {
let coppied = [...b];
a.forEach(el => {
const index = coppied.indexOf(el);
if (index != -1) {
coppied.splice(index, 1);
}
});
return !!coppied.length; //If not empty return true
}
答案 4 :(得分:0)
function missing(a,b){
//remove duplicated elements
var aa=a.filter(function(elem, index, self) {return index ===self.indexOf(elem);});
var bb=b.filter(function(elem, index, self) {return index ===self.indexOf(elem);});
//put in aa the longest array
if(aa.length<bb.length){
var tmp=aa;
aa=bb;
bb=tmp;
}
var result=false;
//search for an aa's element not in bb
aa.forEach(el=>{
if(bb.indexOf(el)<0){
result=true;
return;
}
});
return result;
}
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: false
console.log(missing(array2, array1));
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: true
console.log(missing(array2, array1));
array1 = ['frank', 'george', 'sue', 'frank'];
array2 = ['bob', 'george', 'frank', 'janet']; // result:false, expected:true
console.log(missing(array2, array1));