var arr2 = [{1: '1'}, {2: '2'}, {3: '3'}, {5: '5'}];
var arr3 = [{1: '1'}, {2: '2'}, {3: '3'}, {4: '4'}, {5: '5'}, {6: '6'}];
var arr4 = [{1: '1'}, {2: '2'}, {3: '3'}, {4: '0'}, {5: '5'}, {6: '0'}];
var arr2 = [{1: '1'}, {2: '2'}, {3: '3'}, {5: '5'}];
var arr3 = [{1: '1'}, {2: '2'}, {3: '3'}, {4: '4'}, {5: '5'}, {6: '6'}];
var arr4 = [{1: '1'}, {2: '2'}, {3: '3'}, {4: '0'}, {5: '5'}, {6: '0'}];
ES 6 版本(按照 Python 的思想写的):
// jshint esversion:6
let array_to_map = function(arr) {
return arr.reduce(function(a, b){
for(let [k, v] of Object.entries(b)){
a.set(k, v);
}
return a;
}, new Map());
};
let updatedefault = function(a, b, d) {
let am = array_to_map(a);
let bm = array_to_map(b);
for(let [k, v] of bm){
if(typeof am.get(k) == "undefined"){
am.set(k, d);
}
}
let r = [];
for(let [k, v] of am){
let o = {};
o[k] = v;
r.push(o);
}
r.sort(function(a, b){
let x = Object.keys(a)[0];
let y = Object.keys(b)[0];
if(x>y){
return 1;
}else if(x<y){
return -1;
}else{
return 0;
}
});
return r;
};
let arr2 = [{1: '1'}, {2: '2'}, {3: '3'}, {5: '5'}];
let arr3 = [{1: '1'}, {2: '2'}, {3: '3'}, {4: '4'}, {5: '5'}, {6: '6'}];
let arr4 = updatedefault(arr2, arr3, '0');
console.log(arr4);
有几点是问题中没有明确的:
数组里的每个对象一定只有一个键值对吗?
如果 arr2 和 arr3 里都有某个键,但是值不同怎么办?
如果 arr2 和 arr3 里都有某个键值对,但是位于不同的位置,要怎么办?
另外这个数据结构很奇怪、很难用。默认值 '0'
更是奇怪。
13 回答12.8k 阅读
7 回答2k 阅读
5 回答1.4k 阅读
3 回答1.1k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答918 阅读✓ 已解决