首页 > 解决方案 > 将数组与对象进行比较的问题

问题描述

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

编写一个函数 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

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

标签: javascriptarraysobject

解决方案


这样做(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

推荐阅读