内部连接两个带有对象 jquery 或 javascript 的数组
Inner join two array with objects jquery or javascript
我有 2 个数组,其中包含一些对象
const colors=[
{id: 5, color: "yellow"}
{id: 6, color: "green"}
];
const boxes=[
{color_id: 5, name: 4, value: 40}
{color_id: 5, name: 5, value: 50}
{color_id: 6, name: 4, value: 400}
{color_id: 6, name: 5, value: 500}
]
我想要这个结果
var result=[
{color_id: 5, name: 4, value: 40, color: "yellow"}
{color_id: 5, name: 5, value: 50, color: "yellow"}
{color_id: 6, name: 4, value: 400, color: "green"}
{color_id: 6, name: 5, value: 500, color: "green"}
]
我搜索后的解决方案是
const result = [];
$.each(boxes,function(index,value){
result.push($.extend({}, colors[index], boxes[index]));
});
但是没用
与Javascript:
var result = boxes.map(b => {
colors.forEach(c => {
if (c.id === b.color_id)
for (key in c) {
key !== 'id' ? (b[key] = c[key]) : null
}
})
return b
})
这样它也会从颜色中添加任何额外的 key:value。 (即如果有或将来)
您可以将 .filter()
与 .each()
一起使用
var colors=[
{id: 5, color: "yellow"},
{id: 6, color: "green"}
];
var boxes=[
{color_id: 5, name: 4, value: 40},
{color_id: 5, name: 5, value: 50},
{color_id: 6, name: 4, value: 400},
{color_id: 6, name: 5, value: 500}
];
var result = boxes; // result to equal the boxes array
$.each(result , function(i , val){
var colors_match = colors.filter(function(v){
return v.id == val.color_id;
});
result[i]['color'] = colors_match[0].color;
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
const arr = boxes.map(box => {
const color = colors.find(color => color.id === box.color_id).color
return { ...box, color };
});
我有 2 个数组,其中包含一些对象
const colors=[
{id: 5, color: "yellow"}
{id: 6, color: "green"}
];
const boxes=[
{color_id: 5, name: 4, value: 40}
{color_id: 5, name: 5, value: 50}
{color_id: 6, name: 4, value: 400}
{color_id: 6, name: 5, value: 500}
]
我想要这个结果
var result=[
{color_id: 5, name: 4, value: 40, color: "yellow"}
{color_id: 5, name: 5, value: 50, color: "yellow"}
{color_id: 6, name: 4, value: 400, color: "green"}
{color_id: 6, name: 5, value: 500, color: "green"}
]
我搜索后的解决方案是
const result = [];
$.each(boxes,function(index,value){
result.push($.extend({}, colors[index], boxes[index]));
});
但是没用
与Javascript:
var result = boxes.map(b => {
colors.forEach(c => {
if (c.id === b.color_id)
for (key in c) {
key !== 'id' ? (b[key] = c[key]) : null
}
})
return b
})
这样它也会从颜色中添加任何额外的 key:value。 (即如果有或将来)
您可以将 .filter()
与 .each()
var colors=[
{id: 5, color: "yellow"},
{id: 6, color: "green"}
];
var boxes=[
{color_id: 5, name: 4, value: 40},
{color_id: 5, name: 5, value: 50},
{color_id: 6, name: 4, value: 400},
{color_id: 6, name: 5, value: 500}
];
var result = boxes; // result to equal the boxes array
$.each(result , function(i , val){
var colors_match = colors.filter(function(v){
return v.id == val.color_id;
});
result[i]['color'] = colors_match[0].color;
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
const arr = boxes.map(box => {
const color = colors.find(color => color.id === box.color_id).color
return { ...box, color };
});