繁体   English   中英

将数组与对象进行比较的问题

[英]Problem with comparing an Array with an object

是的,这是作业,我不想作弊,我想弄清楚我做错了什么:)“当我有一个“未定义”的值时,我到底需要做什么?

编写一个函数 compare 接受一个数组和一个对象,如果所有数组值都作为对象值存在,则返回 true。 请注意:我的导师不希望学生使用任何花哨的快捷方式,例如 Object.values(object) 这是我目前的代码:

const compare = function (array, object) {
    let i = 0;  
    while(i<array.length){
        for(const key in object){   
            if(array[i] == object[key]) {
                console.log("Array val: "+array[i]  + "  " + "Object val: "+object[key])
                i++
            } 
            else if(array[i] !== object[key]){
                console.log("Array val: "+array[i]  + "  " + "Object val: "+object[key])
                return false
            }
        } 
    }
    return true
}
compare(["one", "two", "three"], { 0: "one", 1: "two", 2: "three" }); // => true
compare(["one", "two", "four"], { 0: "one", 1: "two", 2: "three" }); // => false
compare(["one", "two"], { foo: "one", bar: "two", baz: "three" }); // => true
compare(["one", "two", "three"], { foo: "one", bar: "two" }); // => false

当我有一个“未定义”的值时,我到底需要做什么?

这样做(O(n)):

function compare(arr, obj) {
  const set = new Set(Object.values(obj));
  
  return arr.every(v => set.has(v));
}

console.log(compare(["one", "two", "three"], { 0: "one", 1: "two", 2: "three" }));// => true
console.log(compare(["one", "two", "four"], { 0: "one", 1: "two", 2: "three" }));// => false
console.log(compare(["one", "two"], { foo: "one", bar: "two", baz: "three" }));// => true
console.log(compare(["one", "two", "three"], { foo: "one", bar: "two" }));// => false

如果您需要做旧学校(仍然是 O(n)),我建议这样做:

function compare(arr, obj) {
  const set = {};
  
  for (const key in obj) {
    set[obj[key]] = true; 
  } 
  /* for loop works too
  for (let i = 0; i < arr.length; i++) {
    if (!set[arr[i]]) {
      return false;
    }
  }
  */
  while (arr.length) {
    if (!set[arr.pop()]) {
      return false;
    }
  }
  
  return true;
}

console.log(compare(["one", "two", "three"], { 0: "one", 1: "two", 2: "three" }));// => true
console.log(compare(["one", "two", "four"], { 0: "one", 1: "two", 2: "three" }));// => false
console.log(compare(["one", "two"], { foo: "one", bar: "two", baz: "three" }));// => true
console.log(compare(["one", "two", "three"], { foo: "one", bar: "two" }));// => false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM