Javascript 由另一个对象覆盖对象数组而不影响第一个';s指令
我有两个对象数组,如下所示:Javascript 由另一个对象覆盖对象数组而不影响第一个';s指令,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,我有两个对象数组,如下所示: var listA = [ { name: 'monday', reported: '', closed: '' }, { name: 'tuesday', reported: '', closed: '' }, { name: 'wednesday', reported: '', closed: '' }, { name: 'thursday', reported: '', closed: '' }, { name: 'fr
var listA = [
{ name: 'monday', reported: '', closed: '' },
{ name: 'tuesday', reported: '', closed: '' },
{ name: 'wednesday', reported: '', closed: '' },
{ name: 'thursday', reported: '', closed: '' },
{ name: 'friday', reported: '', closed: '' },
{ name: 'saturday', reported: '', closed: '' },
{ name: 'sunday', reported: '', closed: '' }
];
var listB = [
{ name: 'friday', reported: '23', closed: '17' },
{ name: 'tuesday', reported: '28', closed: '24' },
{ name: 'saturday', reported: '10', closed: '8' },
];
我想用listB中的值覆盖listA,而不影响listA中对象的顺序。我用unionBy试过了。结果如下:
{name: "friday", reported: "23", closed: "17"}
{name: "tuesday", reported: "28", closed: "24"}
{name: "saturday", reported: "10", closed: "8"}
{name: "monday", reported: "", closed: ""}
{name: "wednesday", reported: "", closed: ""}
{name: "thursday", reported: "", closed: ""}
{name: "sunday", reported: "", closed: ""}
我期待以下结果:
{name: "monday", reported: "", closed: ""}
{name: "tuesday", reported: "28", closed: "24"}
{name: "wednesday", reported: "", closed: ""}
{name: "thursday", reported: "", closed: ""}
{name: "friday", reported: "23", closed: "17"}
{name: "saturday", reported: "10", closed: "8"}
{name: "sunday", reported: "", closed: ""}
我知道如何通过迭代listA
并用相同的name
替换listB
中的值来实现这一点。但是,我想知道是否有更好的方法通过lodash或ES6实现这一点 使用map
(这样数组就不必变异)和find
var listC = listA.map( s =>
Object.assign( {}, s,
listB.find( s1 => s1.name == s.name ) ) );
演示
var listA=[
{名称:'monday',报告:'',关闭:''},
{name:'星期二',报告:'',关闭:''},
{name:'星期三',报告:'',关闭:''},
{name:'星期四',报告:'',关闭:''},
{名称:'friday',报告:'',关闭:''},
{name:'saturday',报告:'',关闭:''},
{name:'sunday',报告:“”,已关闭:“”
];
var listB=[
{姓名:'friday',报道:'23',结束:'17'},
{姓名:'周二',报道:'28',结束:'24'},
{name:'saturday',reported:'10',closed:'8'},
];
var listC=listA.map(s=>
赋值({},s,
查找(s1=>s1.name==s.name));
console.log(listC)代码>使用map
(这样数组就不必变异)和find
var listC = listA.map( s =>
Object.assign( {}, s,
listB.find( s1 => s1.name == s.name ) ) );
演示
var listA=[
{名称:'monday',报告:'',关闭:''},
{name:'星期二',报告:'',关闭:''},
{name:'星期三',报告:'',关闭:''},
{name:'星期四',报告:'',关闭:''},
{名称:'friday',报告:'',关闭:''},
{name:'saturday',报告:'',关闭:''},
{name:'sunday',报告:“”,已关闭:“”
];
var listB=[
{姓名:'friday',报道:'23',结束:'17'},
{姓名:'周二',报道:'28',结束:'24'},
{name:'saturday',reported:'10',closed:'8'},
];
var listC=listA.map(s=>
赋值({},s,
查找(s1=>s1.name==s.name));
console.log(listC)
我想知道写Object.assign({},s,listB.find(s1=>s1.name==s.name))
而不是Object.assign(s,listB.find(s1=>s1.name==s.name))
@Arkej可能是因为这会修改列表数组。我想知道写Object.assign({},s,listB.find)是否有任何原因(s1=>s1.name==s.name))
而不是Object.assign(s,listB.find(s1=>s1.name==s.name))
@Arkej可能是因为这样会修改listA数组