JavaScript数组和对象映射

JavaScript数组和对象映射,javascript,arrays,maps,javascript-objects,Javascript,Arrays,Maps,Javascript Objects,我有两个javascript变量 1名为类别的数组: ["Casual & Fashion", "Jackets", "PPE & Safety Equipment", "Sports & Leisure", "Workwear", "Accessories"] [ {field: "Workwear", cost: 1

我有两个javascript变量

1名为类别的数组

["Casual & Fashion", "Jackets", "PPE & Safety Equipment", "Sports & Leisure", "Workwear", "Accessories"]
  [
    {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 2.6},
    {field: "Hide", cost: 2.8, cost_p2: 0, cost_diff: -2.8, revenue: 5.6},
    {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 10},
    {field: "Safety boots", cost: 24.95, cost_p2: 0, cost_diff: -24.95, revenue: 91},
    {field: "Safety Shoes", cost: 13.9, cost_p2: 0, cost_diff: -13.9, revenue: 27.8},
    {field: "Shorts", cost: 7.45, cost_p2: 0, cost_diff: -7.45, revenue: 14.9},
    {field: "Soft Shell", cost: 17.3, cost_p2: 17.3, cost_diff: 0, revenue: 31.92}
  ]
2称为结果的对象数组

["Casual & Fashion", "Jackets", "PPE & Safety Equipment", "Sports & Leisure", "Workwear", "Accessories"]
  [
    {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 2.6},
    {field: "Hide", cost: 2.8, cost_p2: 0, cost_diff: -2.8, revenue: 5.6},
    {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 10},
    {field: "Safety boots", cost: 24.95, cost_p2: 0, cost_diff: -24.95, revenue: 91},
    {field: "Safety Shoes", cost: 13.9, cost_p2: 0, cost_diff: -13.9, revenue: 27.8},
    {field: "Shorts", cost: 7.45, cost_p2: 0, cost_diff: -7.45, revenue: 14.9},
    {field: "Soft Shell", cost: 17.3, cost_p2: 17.3, cost_diff: 0, revenue: 31.92}
  ]
现在,如您所见,“工作服”和“配饰”都出现在这两个类别中,因此我需要我的最终阵列如下所示(基于原始类别):

仅取匹配的“字段”值和相关的“收入”值

我可以用语言表达逻辑,但语法正在扩展我的能力


谢谢你的帮助。谢谢

是的,有两个循环,
map
find

const categories = ["A", "B", "C", "D"];
const result = [{"A" : 3}, {"D" : 7}];

const final = categories.map(category => {
  const resultItem = result.find(item => category in item);
  return resultItem ?? { [category]: 0 };
});

console.log(final);
// [
//  0: { A: 3 },
//  1: { B: 0 },
//  2: { C: 0 },
//  3: { D: 7 }
// ]
回答:原问题措辞更改后:

const final = categories.map(category => {
  const resultItem = result.find(item => item.field === category);
  return { [category]: resultItem ? resultItem.revenue : 0 };
});

console.log(final);
// [
//  0: {Casual & Fashion: 0},
//  1: {Jackets: 0},
//  2: {PPE & Safety Equipment: 0},
//  3: {Sports & Leisure: 0},
//  4: {Workwear: 2.6},
//  5: {Accessories: 10}
// ]

这段代码也经过了测试。

我们只是用一种简单的方式完成了

let arr=[“休闲与时尚”、“夹克”、“PPE与安全设备”、“运动与休闲”、“工作服”、“配件”];
让dataArr=[
{字段:“工作服”,成本:1.3,成本2:0,成本差异:-1.3,收入:2.6},
{字段:“隐藏”,成本:2.8,成本2:0,成本差异:-2.8,收入:5.6},
{字段:“附件”,成本:0,成本2:3.1,成本差异:3.1,收入:10},
{字段:“安全靴”,成本:24.95,成本2:0,成本差异:-24.95,收入:91},
{字段:“安全鞋”,成本:13.9,成本2:0,成本差异:-13.9,收入:27.8},
{字段:“空头”,成本:7.45,成本2:0,成本差异:-7.45,收入:14.9},
{字段:“软壳”,成本:17.3,成本2:17.3,成本差异:0,收入:31.92}
];
const resultar=arr.map((itemName)=>{
const result=dataArr.find(({field})=>field==itemName)
返回itemName==结果?字段?
{[itemName]:parseFloat(`${result.revenue}`)}:{[itemName]:0};
})
console.log(resultar)