在对象键值中分割逗号并读取值

问题描述 投票:0回答:2

我有一个对象数组,其中一些键值以逗号分隔设置 下面是示例对象,它是怎么样的

var data = [{
  "id":1,
  "x, y, z" :"1,2,3"
}, {
  "id":2,
  "x, y, z" :"10,12,153"
}, {
  "id":3,
  "x, y, z" :"9,8,5"
}, {
  "id":4,
  "x, y, z" :"14,87,13"
}]

这是预期的输出

[{
  "id":1,
  "x":1,
  "y":2,
  "z":3
},{
  "id":2,
  "x":10,
  "y":12,
  "z":153
},{
  "id":3,
  "x":9,
  "y":8,
  "z":5
},{
  "id":4,
  "x":14,
  "y":87,
  "z":13
}]

下面是我尝试过的代码,

const outputArray = data.map((item:any, index:number) => {
      let commaHeaders = Object.keys(item)[index]?.split(',');
      console.log(commaHeaders)
      if(commaHeaders && commaHeaders.length >= 2) {
        commaHeaders.map((comma) =>{
          item[comma] = comma.trim();
        })
      }
      return item
});

注意 该函数应该是通用的,在某些情况下我会得到 a,b,c 作为键值而不是 x,y,z 任何帮助或建议都非常有帮助!

javascript arrays typescript validation data-manipulation
2个回答
1
投票

类似:

function decommafy(obj) {
  const newObj = {};
  for (const [key, value] of Object.entries(obj)) {
    if (key.includes(",") && typeof value === "string") {
      const keys = key.split(",");
      const values = value.split(",");
      for (let i = 0; i < keys.length; i++) {
        newObj[keys[i].trim()] = values[i].trim();
      }
    } else {
      newObj[key] = value;
    }
  }
  return newObj;
}

const result = [
  {
    id: 1,
    "x, y, z": "1,2,3",
  },
  {
    id: 2,
    "fnef, fnerdl": "farb,forb",
    "zub,zab": "zeeb,zib",
  },
].map(decommafy);

console.log(result);

这不会自动将值转换为数字,但您可以简单地添加它。


0
投票

您可以拆分所有键/值对并将有限值转换为数字。

const
    data = [{ "id": 1, "x, y, z": "1,2,3" }, { "id": 2, "x, y, z": "10,12,153" }, { "id": 3, "x, y, z": "9,8,5" }, { "id": 4, "x, y, z": "14,87,13" }],
    result = data.map(o => Object.fromEntries(Object
        .entries(o)
        .flatMap(([k, v]) => {
            const
                kk = k.split(/\s*,\s*/),
                vv = v.toString().split(/\s*,\s*/).map(v => isFinite(v) ? +v : v);
                
            return kk.map((k, i) => [k, vv[i]]);
        })    
    ));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

© www.soinside.com 2019 - 2024. All rights reserved.