Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象转换为保留数组的索引_Javascript_Arrays_Angularjs_Object_Multidimensional Array - Fatal编程技术网

Javascript 将对象转换为保留数组的索引

Javascript 将对象转换为保留数组的索引,javascript,arrays,angularjs,object,multidimensional-array,Javascript,Arrays,Angularjs,Object,Multidimensional Array,我有一个多维对象。我需要将嵌套对象转换为数组,我这样做: var foobar = {"foo1": { "5": "bar1", "8": "bar2" }, "foo2": { "3": "bar8", "5": "bar9" }}; angular.forEach(foobar, function(value, key) { if (angular.isObject(value)) { var arr = Object.keys(value).map(functi

我有一个多维对象。我需要将嵌套对象转换为数组,我这样做:

var foobar = {"foo1": { "5": "bar1", "8": "bar2" }, "foo2": { "3": "bar8", "5": "bar9" }};

angular.forEach(foobar, function(value, key) {
    if (angular.isObject(value)) {
        var arr = Object.keys(value).map(function(k) { return value[k]; });
        foobar[key] = arr;
    }
});

console.log(foobar);

{"foo1": ["bar1", "bar2"], "foo2": ["bar8", "bar9"]};
如何将对象转换为保留数组的索引,使其如下所示:

{"foo1": [5 => "bar1", 8 => "bar2"], "foo2": [3 => "bar8", 5 => "bar9"]};
试一下:

angular.forEach(foobar, function(value, key) {
  if (angular.isObject(value)) {
    var arrValue = [];
    Object.keys(value).forEach(function(k) { arrValue[k] = value[k]; });
    foobar[key] = arrValue;
  }
});

我认为最好将
map
替换为
each
,两者都可以工作,但使用
map
表示您对映射结果感兴趣。因此,在以后的代码复查中可能会出现错误。将
map
替换为
each
会产生角度错误:
TypeError:Object.keys(…)。每个都不是函数。您最初使用
map
的方法实现了我所需要的功能。所以我会接受答案。但我没有想到,当我将带有非后续索引的数组插入
$location.search(foobar)
以从中生成查询字符串时,它会生成所有应该位于提供的索引之前的数组元素,如
未定义的
,以添加到我以前的注释中:当我使用
$location.search({“foo1”:[3=>'bar1']})
。它返回以下字符串:
http://website.com/path?foo1=undefined&foo1=undefined&foo1=bar1
。所以我不得不重新考虑算法。啊,对不起,我把它和承诺混在一起了。每一个