将字符串数组转换为键值对

Posted

技术标签:

【中文标题】将字符串数组转换为键值对【英文标题】: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。因此,当字符串转换为数字时,它们将不再是相同的数字 【参考方案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));

【讨论】:

以上是关于将字符串数组转换为键值对的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将匿名类型转换为键/值数组?

将NSString转换为键值对

将 json 字典列转换为键值对行(Redshift+Postgresql)

swift 3 将 json 数组解析为键值

将 json 格式的键值对转换为以符号为键的 ruby​​ 哈希的最佳方法是啥?

C# 给枚举定义DescriptionAttribute,把枚举转换为键值对