jQuery从多维关联数组中切片所有键

jQuery slice all keys from multidimensional associative array

提问人:Bachir Messaouri 提问时间:2/16/2019 最后编辑:Bachir Messaouri 更新时间:2/17/2019 访问量:51

问:

更新的问题

下面是 jQuery 中数组 (dataSet) 的控制台输出:

[
    {
        "Alias_0":"Toto",
        "Address_1":"Here",
        "Location_0":"Bombay"
    },
    {
        "Alias_0":"Tata",
        "Address_1":"There",
        "Location_0":"Berlin"
    },
    {
        "Alias_0":"Tutu",
        "Address_1":"Somewhere",
        "Location_0":"Brussels"
    }
]

以下是我想如何转换它:

[
    {
        "Alias":"Toto",
        "Address":"Here",
        "Location":"Bombay"
    },
    {
        "Alias":"Tata",
        "Address":"There",
        "Location":"Berlin"
    },
    {
        "Alias":"Tutu",
        "Address":"Somewhere",
        "Location":"Brussels"
    }
]

这是我的尝试:

var dataSet = [
    {"Alias_0": "Toto", "Address_1": "Here",      "Location_0": "Bombay"},
    {"Alias_0": "Tata", "Address_1": "There",     "Location_0": "Berlin"},
    {"Alias_0": "Tutu", "Address_1": "Somewhere", "Location_0": "Brussels"}
];

var result=[];

$.each(dataSet, function(key1,value1){
    result[key1] = new Array();
    $.each(dataSet[key1], function(key2,value2){
        key2=key2.slice(0,-2);          
        result[key1][key2] = new Array();
        result[key1][key2] = value2;
    })
})

console.log(result)

这是我得到的:

[
    [],
    [],
    []
]

这里有什么问题? 在控制台中输出时,键和值显示预期数据。但是“result”数组不包括它们。 此外,新的数组格式不好([] 而不是 {})

仅供参考:我更愿意从原始数组中剥离键的最后一个字符,但由于我无法做到这一点,我正在尝试从原始数组创建第二个数组。但是,如果可以直接转换原始数组而不创建第二个数组,那将是理想的。

总而言之,从数组的每个键中剥离两个字符似乎过于复杂。一定有更简单的方法(直函数?

谢谢。

jQuery 数组

评论


答:

1赞 gaetanoM 2/16/2019 #1

你可以使用 .reduce():

var data = [{"black_0": "1", "red_1": "2", "blue_1": "3"}];

var result = Object.keys(data[0]).reduce(function(a, e) {
    a[0][e.replace(/_[01]/, '')] = data[0][e];
    return a;
}, [{}]);
console.log(result);

评论

0赞 Bachir Messaouri 2/16/2019
谢谢gaetanoM。它有效,但现在我的数组中只有一行。此数组馈送一个表,在您的脚本中,该表只有一行。如果我剪切了你脚本中的所有 [0] 索引,那么它就不起作用。
1赞 gaetanoM 2/16/2019
@BachirMessaouri 您可以更新问题,添加数据数组示例吗?谢谢
1赞 Bachir Messaouri 2/16/2019
请参阅更新的问题。基本上,这是您所拥有的,但有很多条目。仅供参考:我不需要区分“_0”和“_1”。我只需要盲目地切掉每个键的最后两个字符。无论如何,它始终是“_0”或“_1”。谢谢。
0赞 Bachir Messaouri 2/17/2019
这不是你想到的更新吗?如果你的意思是别的,请告诉我。谢谢。
0赞 Bachir Messaouri 2/17/2019 #2

终于明白了。

var dataSet = [
    {"Alias_0": "Toto", "Address_1": "Here",      "Location_0": "Bombay"},
    {"Alias_0": "Tata", "Address_1": "There",     "Location_0": "Berlin"},
    {"Alias_0": "Tutu", "Address_8": "Somewhere", "Location_0": "Brussels"}
];

var sliced_dataSet=[];

for(var i=0;i<dataSet.length;i++){
    var obj={};
    Object.keys(dataSet[i]).forEach(function(key){
        var k = key.substring(0,key.length-2);
        obj[k] = dataSet[i][key];
    });
    sliced_dataSet.push(obj);
}

console.log(arr)