【问题标题】:jQuery slice all keys from multidimensional associative arrayjQuery从多维关联数组中切片所有键
【发布时间】:2019-07-10 11:18:42
【问题描述】:

更新问题

这里是 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)

这是我得到的:

[
    [],
    [],
    []
]

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

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

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

谢谢。

【问题讨论】:

    标签: jquery arrays key slice


    【解决方案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);

    【讨论】:

    • 谢谢gaetanoM。它有效,但现在我的数组中只有一行。该数组提供一个表格,并且使用您的脚本,该表格只有一行。如果我删除了脚本中的所有 [0] 索引,那么它就不起作用了。
    • @BachirMessaouri 你能更新添加 data 数组示例的问题吗?谢谢
    • 查看更新后的问题。基本上它就是你所拥有的,但有很多条目。仅供参考:我不需要区分“_0”和“_1”。我只需要盲目地切割每个键的最后两个字符。无论如何,它总是“_0”或“_1”。谢谢。
    • 这不是您想要的更新吗?如果你的意思是别的,请告诉我。谢谢。
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2021-11-23
      • 2014-08-25
      相关资源
      最近更新 更多