[英]Plain JS or Lodash - replace object values with values from other object
我有兩個對象:
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,因此可以從那里使用功能,但是我找不到用於此目的的任何功能。 有沒有?
如果使用ES6,則可以使用它
let merge = { ...first, ..._.pick(second, Object.keys(first)) }
您可以在第二個數組中的鍵上使用循環。 對於第一個中存在的任何鍵,請覆蓋該值。
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);
使用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)
您要更新
路口
屬性。
所以基本上像這樣:
Object.keys(a).forEach(prop => if(b.hasOwnProperty(prop)) a[prop] = b[prop]))
要么
_.intersection(Object.keys(a), Object.keys(b)).forEach(prop => a[prop] = b[prop])
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);
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.