由多个数组属性创建对象

3

我正在遍历一个包含多个电话号码作为键和值为对象数组的对象。

我编写了一个reduce方法,将所有日程表都分组在一起,除了一个问题。

如果您运行代码段,则会看到res是:{trackingNumber:[[Array]]}

我需要对象看起来像这样:{trackingNumber:[Array]}

我持续遇到的问题是尝试通过初始索引弹出或切片或执行任何操作,使得被连接的第一个数组(Object.values(res))基本上将该数组的第一个对象枚举为与追踪号相关联的值的前7个元素。

{trackingNumber:[0:string,1:string,2:string,3:{0 1和2中的字符串对象}]}

非常感谢您的帮助。

let todayNewTollFree = [
{paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18003160182"},
{paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18003160182"
},
{
paymentSchedule: [],
tracking: "+12134105385"
},
{
paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18007084605"
},
{
paymentSchedule:[{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18007100629"
}
]

let test = todayNewTollFree.reduce(function (res, obj) {
    let key = obj.tracking;

    if (res[key]) {
      res[key] = res[key].map((key) =>
        [key].flat().concat(obj.paymentSchedule)
      );
    } else res[key] = [obj.paymentSchedule];
    for (const tracking in res) {
      let values = Object.values(res[key]).flat();

      console.log(tracking);
      console.log(values);
    }
    return res;
  }, {});
      
      console.log(test)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

for in循环可以正确创建一个平面数组,但我每次尝试回去调用或分配追踪新创建的数组都不起作用。

2
当发布的数据是抽象的且无法用于测试代码时,很难提供帮助。请尝试生成一个简化的最小集合,其中包含足够的属性以使其实际运行。然后从这个极简集合中提供更好的预期结果示例。老实说,目前输出与预期输出有何不同并不清楚。请注意,您可以在问题编辑器中单击“<>”并创建可运行的堆栈片段,直接记录到此页面。 - charlietfl
1个回答

2

在向对象添加新键时,不应将其放置在数组文字[...]中(因为这会创建一个第一个元素是数组的数组),而应将数组本身分配给属性。此外,在添加到数组时,Array#map不必要,Array#concat就可以完成任务。

let todayNewTollFree = [ {paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18003160182"}, {paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18003160182" }, { paymentSchedule: [], tracking: "+12134105385" }, { paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18007084605" }, { paymentSchedule:[{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18007100629" } ]
let test = todayNewTollFree.reduce(function (res, obj) {
  let key = obj.tracking;
  if (res[key]) {
    res[key] = res[key].concat(obj.paymentSchedule)
  } else res[key] = obj.paymentSchedule;
  return res;
}, {});
console.log(test)


1
我就像震惊了。因为我发誓我已经尝试过类似的东西1000次了。 - Mickey Gray
2
抱歉我不得不离开一会儿,是的! - Mickey Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接