javascript - 我需要创建一个函数,该函数返回由“名称”索引的纯 JavaScript 字符串,并包含所有“道具”
问题描述
我的代码似乎是正确的,但它在 Json 结果的某些位置没有返回“:”而是“,”。请在代码注释中查看所需的结果。
我也不喜欢我为从 Json 表达式中删除数组括号而编写的“替换”,我不应该修改 JSON 字符串。有没有更优雅的方法来做到这一点?
// JSON Object
var items = [
{
name: "item 1",
id: 2,
props: {
a: "a prop1",
b: "b prop1",
},
values: [1, 2, 3],
},
{
name: "item 2",
id: 3,
props: {
a: "a prop2",
b: "b prop2",
},
values: [6, 1, 2, 3, 4],
},
{
name: "item 3",
id: 4,
props: {
a: "a prop3",
c: "c prop3",
},
values: [10, 1, 2, 3, 4, 5],
},
];
export function getObject(items) {
var arr = [];
for(var i in items){
arr.push(items[i].name);
arr.push(items[i].props);
}
var myJSON = JSON.stringify(arr).toString();
var test = myJSON.replace("[","{").replace("]","}"); // I couldn't find another way to extract the array data from the array brackets.
var test2 = JSON.stringify(test);
// test2 is returning: "{\"item 1\",{\"a\":\"a prop1\",\"b\":\"b prop1\"},\"item 2\",{\"a\":\"a prop2\",\"b\":\"b prop2\"},\"item 3\",{\"a\":\"a prop3\",\"c\":\"c prop3\"}}"
// but it's expected: "{\"item 1\":{\"a\":\"a prop1\",\"b\":\"b prop1\"},\"item 2\":{\"a\":\"a prop2\",\"b\":\"b prop2\"},\"item 3\":{\"a\":\"a prop3\",\"c\":\"c prop3\"}}"
return test2;
}
解决方案
用于.map
将每个项目转换为一个对象,该对象具有一个属性,其键是item.name
,值是item.props
对象:
const getObject = items => items.map(item => ({ [item.name]: item.props }));
// JSON Object
var items = [{
name: "item 1",
id: 2,
props: {
a: "a prop1",
b: "b prop1",
},
values: [1, 2, 3],
},
{
name: "item 2",
id: 3,
props: {
a: "a prop2",
b: "b prop2",
},
values: [6, 1, 2, 3, 4],
},
{
name: "item 3",
id: 4,
props: {
a: "a prop3",
c: "c prop3",
},
values: [10, 1, 2, 3, 4, 5],
},
];
console.log(getObject(items));
如果你真的需要一个 JSON 字符串而不是一个对象,那么把JSON.stringify
它放在周围。(请记住:没有“JSON 对象”之类的东西。)
const getObject = items => JSON.stringify(items.map(item => ({ [item.name]: item.props })));
// JSON Object
var items = [{
name: "item 1",
id: 2,
props: {
a: "a prop1",
b: "b prop1",
},
values: [1, 2, 3],
},
{
name: "item 2",
id: 3,
props: {
a: "a prop2",
b: "b prop2",
},
values: [6, 1, 2, 3, 4],
},
{
name: "item 3",
id: 4,
props: {
a: "a prop3",
c: "c prop3",
},
values: [10, 1, 2, 3, 4, 5],
},
];
console.log(getObject(items));
推荐阅读
- nlp - 如何使用 Pytorch 计算语言模型的困惑度
- android - 在 android studio 中配置 Flutter SDK
- webpack - 工兵 webpack 警告:“模式”选项尚未设置
- kubernetes - Helm:如何使用父图表覆盖子图表的值?
- ros - 如何在对象跟踪中使用 PID 控制来实现线速度和角速度
- css - Flexgrid 和 Grid 在 Angular 中无法响应
- javascript - Javascript 问题我正在尝试从 textarea 中提取字符串
- stm32 - 有没有办法在不使用 DMA 的情况下在 Nucleo 板上使用双模式?
- python - tkinter 类中的退出程序
- python - 根据可用的经纬度查找距离,错误ValueError: could not convert string to float: 'start_station_latitude'