更好的方法是基于相同的 id 将对象数组推送到对象数组?
better way push array of an object to array of an object based on the same id?
嗨,我想将一个对象数组推送到一个对象数组,这样新的 属性 将推送到基于相同 _id 的对象数组
这是原始数据:
const data =[
{
foo:foo1,
data:{
_id:"a1",
man:2
}
},
{
foo:foo1,
data:{
_id:"a1",
man:2
}
}
]
这是我要放在我的原始数据上的数据
const d = [{
_id:"a1",
women:4,
}]
所需的输出是:
const data =[
{
foo:foo1,
data:{
_id:"a1",
man:2,
women:4
}
},
{
foo:foo1,
data:{
_id:"a1",
man:2,
women:4
}
}
]
我觉得可以用for循环检查_id是否相同,然后推送给对象,但是有没有更好的方法呢?或使用 lodash?任何的想法?提前致谢
你可以试试这个!
const d = [{
_id:"a1",
women:4,
}
]
const data =[
{
foo:"foo1",
data:{
_id:"a1",
man:2
}
},
{
foo:"foo1",
data:{
_id:"a1",
man:2
}
}
]
var arr = data.map(function(obj, i){
d.map(function(o,i){
if(obj.data._id == o._id)
{
obj.data.women = o.women;
}
});
return obj;
});
console.log(arr);
使用您拥有的数据结构,您可以遍历两者并使用相同的 id
简单地更新条目。也就是说,这是一个具有 O(n^2) 时间复杂度的蛮力解决方案。此解决方案还 returns 一个新对象而不是改变原始对象。
// Existing entries
const entries = [
{
data: {
id: 'a1',
man: 2
}
},
{
data: {
id: 'a1',
man: 2
}
},
];
// Data with same id to update
const updates = [
{
id: 'a1',
women: 4
},
];
/**
* Update properties for an existing entry given
* a list of partially updated entries
*/
function updateEntries(entriesList, updatesList) {
// Build up new array as to not mutate
// the existing data structure
const newEntries = [];
for (const entry of entriesList) {
for (const update of updatesList) {
// Update when the ids match
if (entry.data.id === update.id) {
newEntries.push({
data: {
...entry.data,
...update
}
});
} else {
newEntries.push(entry);
}
}
}
return newEntries;
}
const newEntries = updateEntries(entries, updates);
// newEntries = [
// {
// data: {
// id: 'a1',
// man: 2,
// women: 4
// }
// },
// {
// data: {
// id: 'a1',
// man: 2,
// women: 4
// }
// },
// ];
如果您将 entries
的数据结构更改为并反对由 id
组织的每个 entry
假设它们实际上应该是唯一的,您可以获得 O(n)基于 updates
.
// Entries by id
const entries = {
a1: {
man: 2
},
a2: {
man: 2
},
};
嗨,我想将一个对象数组推送到一个对象数组,这样新的 属性 将推送到基于相同 _id 的对象数组 这是原始数据:
const data =[
{
foo:foo1,
data:{
_id:"a1",
man:2
}
},
{
foo:foo1,
data:{
_id:"a1",
man:2
}
}
]
这是我要放在我的原始数据上的数据
const d = [{
_id:"a1",
women:4,
}]
所需的输出是:
const data =[
{
foo:foo1,
data:{
_id:"a1",
man:2,
women:4
}
},
{
foo:foo1,
data:{
_id:"a1",
man:2,
women:4
}
}
]
我觉得可以用for循环检查_id是否相同,然后推送给对象,但是有没有更好的方法呢?或使用 lodash?任何的想法?提前致谢
你可以试试这个!
const d = [{
_id:"a1",
women:4,
}
]
const data =[
{
foo:"foo1",
data:{
_id:"a1",
man:2
}
},
{
foo:"foo1",
data:{
_id:"a1",
man:2
}
}
]
var arr = data.map(function(obj, i){
d.map(function(o,i){
if(obj.data._id == o._id)
{
obj.data.women = o.women;
}
});
return obj;
});
console.log(arr);
使用您拥有的数据结构,您可以遍历两者并使用相同的 id
简单地更新条目。也就是说,这是一个具有 O(n^2) 时间复杂度的蛮力解决方案。此解决方案还 returns 一个新对象而不是改变原始对象。
// Existing entries
const entries = [
{
data: {
id: 'a1',
man: 2
}
},
{
data: {
id: 'a1',
man: 2
}
},
];
// Data with same id to update
const updates = [
{
id: 'a1',
women: 4
},
];
/**
* Update properties for an existing entry given
* a list of partially updated entries
*/
function updateEntries(entriesList, updatesList) {
// Build up new array as to not mutate
// the existing data structure
const newEntries = [];
for (const entry of entriesList) {
for (const update of updatesList) {
// Update when the ids match
if (entry.data.id === update.id) {
newEntries.push({
data: {
...entry.data,
...update
}
});
} else {
newEntries.push(entry);
}
}
}
return newEntries;
}
const newEntries = updateEntries(entries, updates);
// newEntries = [
// {
// data: {
// id: 'a1',
// man: 2,
// women: 4
// }
// },
// {
// data: {
// id: 'a1',
// man: 2,
// women: 4
// }
// },
// ];
如果您将 entries
的数据结构更改为并反对由 id
组织的每个 entry
假设它们实际上应该是唯一的,您可以获得 O(n)基于 updates
.
// Entries by id
const entries = {
a1: {
man: 2
},
a2: {
man: 2
},
};