我有两个对象:
let first = {
a: 'John',
b: 22,
c: 'example'
}
let second = {
b: 55,
d: 'demo'
}
我只想将已经存在的项目从第二个对象替换为第一个。结果应如下所示(因此仅应更改b项,而忽略新的d项):
{
a: 'John',
b: 55, // changed
c: 'example'
}
合并将不起作用,因为它还会添加新项目。 我可以使用foreach,但我认为应该对此做一个简短的回答。我已经在我的项目中使用lodash,因此可以从那里使用功能,但是我找不到用于此目的的任何功能。有吗?
答案 0 :(得分:2)
如果使用ES6,则可以使用此
let merge = { ...first, ..._.pick(second, Object.keys(first)) }
答案 1 :(得分:1)
您可以在第二个数组中的键上使用循环。对于第一个中存在的任何键,请覆盖该值。
let first = {
a: 'John',
b: 22,
c: 'example'
}
let second = {
b: 55,
d: 'demo'
}
for (const k in second) {
if (k in first) {
first[k] = second[k];
}
}
console.log(first);
答案 2 :(得分:1)
使用lodash,您可以使用_.merge
,_.pick
和_.keys
做类似的事情:
let first = {
a: 'John',
b: 22,
c: 'example'
}, second = {
b: 55,
d: 'demo'
}
let result = _.merge(first, _.pick(second, _.keys(first)))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
使用ES6,您可以在这样的新对象上使用Object.keys,然后使用Array.forEach:
let first = {
a: 'John',
b: 22,
c: 'example'
}, second = {
b: 55,
d: 'demo'
}, result = new Object(null)
Object.keys(first).forEach(k => result[k] = second[k] || first[k])
console.log(result)
这假设您不想mutate
的任何对象。如果您不在乎:
let first = {
a: 'John',
b: 22,
c: 'example'
}, second = {
b: 55,
d: 'demo'
}
Object.keys(first).forEach(k => first[k] = second[k] || first[k])
console.log(first)
答案 3 :(得分:0)
您要更新
的值交叉点
属性。
所以基本上像这样:
<textarea id="ta" oninput="onInput()"></textarea>
<script>
let ta = document.querySelector('#ta')
function onInput() {
console.log(ta.value) // You can do stuff with this value
if (ta.value === 'red') {
applyRed()
}
}
function applyRed() {
ta.classList.add('red')
}
</script>
或
Object.keys(a).forEach(prop => if(b.hasOwnProperty(prop)) a[prop] = b[prop]))
答案 4 :(得分:0)
let first = {
a: 'John',
b: 22,
c: 'example'
}
let second = {
b: 55,
d: 'demo'
}
Object.keys(second).forEach(function(key,index){
if (first.hasOwnProperty(key)) {
first[key]=second[key];
}
});
console.log(first);
答案 5 :(得分:0)
var a = {
a: 'John',
b: 22,
f:[11,22,2],
d: {a:1,b:2,c:0},
c: 'example'
}
var b = {
b: 55,
f:[3],
d: {c:1,b:11},
}
function mergeObjects(a,b){
let common = _.pick(b, Object.keys(a));
return _.mergeWith(a, common, customizer)
}
function customizer(objValue, srcValue) {
if (_.isArray(objValue)) {
return objValue.concat(srcValue);
}
if(_.isObject(objValue)) {
return mergeObjects(objValue,srcValue)
}
}
mergeObjects(a,b)