【问题标题】:Converting Array of Strings into Key Value Pair将字符串数组转换为键值对
【发布时间】:2019-09-20 23:52:25
【问题描述】:

我有一个来自后端源的字符串,格式为:

数字:“1123763449056714753、1123764853364097024、1123770213739241473...”

我想将它转换为键值对某种形式,以便我可以为我的单个项目 div 映射这些 id:

["numbers": [ 
              {"id":1123763449056714753 }, 
              {"id":1123764853364097024 },
              {"id":1123770213739241473 },
             ....
            ]
]

[                 {"id":1123763449056714753 }, 
                  {"id":1123764853364097024 },
                  {"id":1123770213739241473 },
                 ....

    ]

我尝试使用 forEach()/map(),但得到未定义的错误。另外我不确定它是字符串集合还是字符串数组 请帮忙

【问题讨论】:

  • 考虑到整个变量是字符串。使用let obj = JSON.parse('{' +str+'}'); obj.numbers = obj.numbers.split(',').map(id => ({id}))
  • 输入是逗号分隔的字符串还是标题中提到的字符串数组?此外,您的输出无效。请发布有效输入和预期输出以创建minimal reproducible example
  • object.numbers = object.numbers.split(',').map(i => { id: +i }。这个问题非常不清楚,并且不包含验证示例所需的最少信息量。请澄清它并添加您尝试过的内容
  • 另外,最好发布不能正常工作的代码。这有助于理解原始意图并给出更有用的答案。 (我同意前面两个cmets)。
  • 在输出中,id是数字类型。所有这些数字都大于Number.MAX_SAFE_INTEGER。因此,当字符串转换为数字时,它们将不再是相同的数字

标签: javascript foreach array.prototype.map


【解决方案1】:

您可以通过保留字符串(大于允许的整数值)来拆分字符串并映射对象。

var object = { numbers: "1123763449056714753,1123764853364097024,1123770213739241473,1123771975162368003" },
    numbers = object.numbers.split(',').map(id => ({ id }));

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

【讨论】:

  • id 不应该是一个数值吗(看他的例子)?编辑:NVM,你已经修复了:P
  • 仅供参考,数字大于Number.MAX_SAFE_INTEGER
  • @adiga 不错,没注意到!因此,从技术上讲,“样本”输出有些无效。
【解决方案2】:

var arr = ["1123763449056714753","1123764853364097024","1123770213739241473","1123771975162368003"];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    var obj = {};
    obj.id = arr[i];
    newArr.push(obj);
}
console.log(newArr)

【讨论】:

    【解决方案3】:

    你可以这样做。

    var data = {"numbers":"1123763449056714753,1123764853364097024,1123770213739241473,1123771975162368003"};
    
    data.numbers = data.numbers.split(',').reduce((res, id) => [...res, {id}], []);
    

    【讨论】:

      【解决方案4】:

      你可以split对象然后map它并返回你想要的结构:

      const obj = {
        "numbers": "1123763449056714753,1123764853364097024,1123770213739241473,1123771975162368003..."
      }
      
      
      const res = {
        numbers: [
          obj.numbers.split(",").map(el => ({
            id: el
          }))
        ]
      }
      
      console.log(res);

      【讨论】:

        【解决方案5】:

        您可以做的一件事是将数字作为数组获取:

        var obj = {
          "numbers": "1123763449056714753,1123764853364097024,1123770213739241473,1123771975162368003"
        };
        
        var result = obj.numbers.split(',').reduce((acc, num) => {
          acc.push({ id: num });
          return acc;
        }, []);
        
        console.log(result)

        或者正如@briosheje 提到的,你也可以使用map

        var result = obj.numbers.split(',').map(num => ({id: num}));
        

        结果如下所示:

        [{"id":"1123763449056714753"},{"id":"1123764853364097024"},{"id":"1123770213739241473"},{"id":"1123771975162368003"}]
        

        【讨论】:

          【解决方案6】:

          根据您的数据,您可以使用“,”拆分数字字符串并循环执行转换,例如

          var data = {"numbers":"1123763449056714753,1123764853364097024,1123770213739241473,1123771975162368003"};
          var numbers_arr = data.numbers.split(",");
          var result = {
            "numbers":[]
          };
          for(var i=0;i<numbers_arr.length;i++){
           var tempObj = {
              "id":parseInt(numbers_arr[i])
            };
            result.numbers.push(tempObj)
          }
          
          console.log(JSON.stringify(result));
          

          【讨论】:

            猜你喜欢
            • 2020-01-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-21
            • 1970-01-01
            • 2022-11-10
            • 2016-03-09
            • 2020-09-27
            相关资源
            最近更新 更多