将字符串数组转换为键值对
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));
【讨论】:
以上是关于将字符串数组转换为键值对的主要内容,如果未能解决你的问题,请参考以下文章
将 json 字典列转换为键值对行(Redshift+Postgresql)