首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将键和零浮点值附加到对象数组中的对象?- Javascript

如何将键和零浮点值附加到对象数组中的对象?- Javascript
EN

Stack Overflow用户
提问于 2019-04-18 11:58:04
回答 4查看 59关注 0票数 0

我有一个对象的输入数组和一个期望的/输出数组

对象的输入数组

代码语言:javascript
复制
var input = [{
"Grade": "AU27",
"Thickness10Qty": "7.00",
"Thickness5Qty": "19.20",
"TotalQty": "26.20"
},
{
"Grade": "FE500D",
"Thickness10Qty": "143.00",
"Thickness12Qty": "69.00",
"Thickness8Qty": "30.00",
"TotalQty": "242.00"
}, 
{
"Grade": "GE500D",
"Thickness18Qty": "90.00",
"Thickness22Qty": "40.00",
"TotalQty": "130.00"
}, 
{
"Grade": "HE500D",
"Thickness26Qty": "70.00",
"TotalQty": "70.00"
}
];

我将其作为所需的对象数组

代码语言:javascript
复制
var output = [{
 "Grade": "AU27",
 "Thickness10Qty": "7.00",
 "Thickness5Qty": "19.20",
 "Thickness12Qty": "0.00",
 "Thickness8Qty": "0.00",
 "Thickness18Qty": "0.00",
 "Thickness22Qty": "0.00",
 "Thickness26Qty": "0.00",
 "TotalQty": "26.20"
 },
 {
  "Grade": "FE500D",
  "Thickness10Qty": "143.00",
  "Thickness12Qty": "69.00",
  "Thickness8Qty": "30.00",
  "Thickness5Qty": "0.00",
  "Thickness18Qty": "0.00",
  "Thickness22Qty": "0.00",
  "Thickness26Qty": "0.00",
  "TotalQty": "242.00"
 }, 
 {
  "Grade": "GE500D",
  "Thickness18Qty": "90.00",
  "Thickness22Qty": "40.00",
  "Thickness10Qty": "0.00",
  "Thickness12Qty": "0.00",
  "Thickness8Qty": "0.00",
  "Thickness5Qty": "0.00",
  "Thickness26Qty": "0.00",
  "TotalQty": "130.00"
  }, 
  {
   "Grade": "HE500D",
   "Thickness26Qty": "70.00",
   "Thickness18Qty": "0.00",
   "Thickness22Qty": "0.00",
   "Thickness10Qty": "0.00",
   "Thickness12Qty": "0.00",
   "Thickness8Qty": "0.00",
   "Thickness5Qty": "0.00",
    "TotalQty": "70.00"
   }
  ];

我要做的是假设在object的输入数组中的第一个对象中,只有Thickness10Qty和Thickness5Qty,所以我必须输入其他键作为0。我想在每个对象中有相同数量的键。类似地,对于object的输入数组中的最后一个对象,只存在Thickness26Qty。因此,我们插入其他关键字作为0,以便在每个对象中具有相同数量的关键字。

如何使用相同数量的键来实现所需的对象数组?

密钥不能硬编码,它来自服务,服务可能返回Thickness34Qty/Thickness46Qty而不是Thickness22Qty,或者返回Thickness38Qty而不是Thickness18Qty

EN

回答 4

Stack Overflow用户

发布于 2019-04-18 12:05:17

创建一个对象中应该包含的所有键的数组,然后迭代对象数组,并使用值0.00添加缺少的键

代码语言:javascript
复制
var input = [{
    "Grade": "AU27",
    "Thickness10Qty": "7.00",
    "Thickness5Qty": "19.20",
    "TotalQty": "26.20"
  },
  {
    "Grade": "FE500D",
    "Thickness10Qty": "143.00",
    "Thickness12Qty": "69.00",
    "Thickness8Qty": "30.00",
    "TotalQty": "242.00"
  },
  {
    "Grade": "GE500D",
    "Thickness18Qty": "90.00",
    "Thickness22Qty": "40.00",
    "TotalQty": "130.00"
  },
  {
    "Grade": "HE500D",
    "Thickness26Qty": "70.00",
    "TotalQty": "70.00"
  }
];

var keys = ["Grade", "TotalQty", "Thickness5Qty", "Thickness8Qty", "Thickness10Qty", "Thickness12Qty", "Thickness18Qty", "Thickness22Qty", "Thickness26Qty"];

var output = input.map(obj => {
  keys.forEach(key => obj[key] ? key : obj[key] = "0.00");
  return obj;
});

console.log(output);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: auto; }

如果键是可变的(例如,您希望每个对象都具有相同的键):

代码语言:javascript
复制
var input = [{
    "Grade": "AU27",
    "Thickness10Qty": "7.00",
    "Thickness5Qty": "19.20",
    "TotalQty": "26.20"
  },
  {
    "Grade": "FE500D",
    "Thickness10Qty": "143.00",
    "Thickness12Qty": "69.00",
    "Thickness8Qty": "30.00",
    "TotalQty": "242.00"
  },
  {
    "Grade": "GE500D",
    "Thickness18Qty": "90.00",
    "Thickness22Qty": "40.00",
    "TotalQty": "130.00"
  },
  {
    "Grade": "HE500D",
    "Thickness26Qty": "70.00",
    "TotalQty": "70.00"
  }
];

var keys = [...new Set(input.map(Object.keys).reduce((acc, curr) => acc.concat(curr)))];

var output = input.map(obj => {
  keys.forEach(key => obj[key] ? key : obj[key] = "0.00");
  return obj;
});

console.log(output);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: auto; }

票数 1
EN

Stack Overflow用户

发布于 2019-04-18 12:20:15

您可以创建一个模板对象,它的所有键都设置为0.00,它定义了您想要的字段,然后您可以在map()中使用Object.assign()将其与现有对象合并。

代码语言:javascript
复制
var input = [{"Grade": "AU27","Thickness10Qty": "7.00","Thickness5Qty": "19.20","TotalQty": "26.20"},{"Grade": "FE500D","Thickness10Qty": "143.00","Thickness12Qty": "69.00","Thickness8Qty": "30.00","TotalQty": "242.00"}, {"Grade": "GE500D","Thickness18Qty": "90.00","Thickness22Qty": "40.00","TotalQty": "130.00"}, {"Grade": "HE500D","Thickness26Qty": "70.00","TotalQty": "70.00"}];

// make template of all keys
let template  = input.reduce((obj, item) => (Object.keys(item).forEach(k => obj[k] = '0.00'), obj), {})

// apply to items:
let newArray = input.map(item => Object.assign({}, template, item))

console.log(newArray)

票数 1
EN

Stack Overflow用户

发布于 2019-04-18 12:32:27

这可能不会设置任何性能记录,但应该演示所发生的步骤以及如何对其进行略微优化。重要的是要注意,对对象的操作将改变输入数组中的对象,因此没有输入/输出数组,因为这将需要克隆对象和比所需更多的工作。

代码语言:javascript
复制
let array = getData()
normalizeData(array)
console.log('output:', array)

function normalizeData(array) {
  let stored_keys = {}
  
  array.forEach((obj, ndx, arr) => {
    let new_keys = []

    // create keys found in other objects
    Object.keys(stored_keys).forEach(key => {
      if (!(key in obj))
        obj[key] = "0.00"
    })

    // detect new keys
    Object.keys(obj).forEach(key => {
      if (!stored_keys[key]) {
        stored_keys[key] = true // track key
        new_keys.push(key)      // track new keys to apply to previous objects
      }
    })

    // add any new keys to previous objects
    if (new_keys.length)
      for (var i = 0, n = ndx; i < n; i++) {
        let prev_obj = arr[i];
        new_keys.forEach(key => prev_obj[key] = "0.00")
      }

  })
}


function getData() {
  return [{
      "Grade": "AU27",
      "Thickness10Qty": "7.00",
      "Thickness5Qty": "19.20",
      "TotalQty": "26.20"
    },
    {
      "Grade": "FE500D",
      "Thickness10Qty": "143.00",
      "Thickness12Qty": "69.00",
      "Thickness8Qty": "30.00",
      "TotalQty": "242.00"
    },
    {
      "Grade": "GE500D",
      "Thickness18Qty": "90.00",
      "Thickness22Qty": "40.00",
      "TotalQty": "130.00"
    },
    {
      "Grade": "HE500D",
      "Thickness26Qty": "70.00",
      "TotalQty": "70.00"
    }
  ];
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55738932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档