javascript - 将数组与对象进行比较的问题
问题描述
是的,这是作业,我不想作弊,我想弄清楚我做错了什么:) “当我有一个“未定义”的值时,我到底需要做什么?
编写一个函数 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
推荐阅读
- c# - 从 XML 标记 C# LINQ 中提取键值
- java - 清除 BottomSheetDialog 的焦点
- python-3.x - Python线程:如何重复调用线程?
- c++ - if( c == (int) c) 是什么意思?
- spring - 如何创建从实体到 dto 的映射器,其中 dto 嵌套在哪里?
- flutter - 在颤振项目中添加另一个语言环境时出现 MaterialLocalization 错误
- python - 对 DataFrame 的一列求和重复的子集行条件
- javascript - 删除带有事件的项目
- java - 从 Spring RequestDumperFilter 中消除敏感标头
- mysql - 从 Mysql 到 Postgresql 的 Pentaho 中的错误“用于编码 UTF-8 的字节序列无效:0x00”