Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 - Fatal编程技术网

Javascript将对象映射转换为多维数组

Javascript将对象映射转换为多维数组,javascript,Javascript,例如,我有一个如下的对象映射: { "key1" : { data: "data1", extra: "none" }, "key2" : { data: "data2", extra: "none" }, "key3" : { data: "data3", extra: "none" }, "key4" : { data: "data4", extra: "none" }, }; 是否有一种方便的方法将其转换为多维数组,如下所示: [ [ "key1

例如,我有一个如下的对象映射:

{
    "key1" : { data: "data1", extra: "none" },
    "key2" : { data: "data2", extra: "none" },
    "key3" : { data: "data3", extra: "none" },
    "key4" : { data: "data4", extra: "none" }, 
};
是否有一种方便的方法将其转换为多维数组,如下所示:

[
    [ "key1" , { data: "data1", extra: "none" } ],
    [ "key2" , { data: "data2", extra: "none" } ],
    [ "key3" , { data: "data3", extra: "none" } ],
    [ "key4" , { data: "data4", extra: "none" } ], 
];
var myObject = {
    "key1" : { data: "data1", extra: "none" },
    "key2" : { data: "data2", extra: "none" },
    "key3" : { data: "data3", extra: "none" },
    "key4" : { data: "data4", extra: "none" }, 
};
var myMultiArray = convert(myObject);
我有一个需要数组的函数,但是我从第三方插件接收的数据是在对象数组中。如果有一些简单的方法来完成两者之间的转换,那就太好了。

试试这个函数:

function convert(original) {
    var multiArray = [];
    for(var key in original) { multiArray.push([ key, original[key] ]); }
    return multiArray;
}
请参见

像这样使用它:

[
    [ "key1" , { data: "data1", extra: "none" } ],
    [ "key2" , { data: "data2", extra: "none" } ],
    [ "key3" , { data: "data3", extra: "none" } ],
    [ "key4" , { data: "data4", extra: "none" } ], 
];
var myObject = {
    "key1" : { data: "data1", extra: "none" },
    "key2" : { data: "data2", extra: "none" },
    "key3" : { data: "data3", extra: "none" },
    "key4" : { data: "data4", extra: "none" }, 
};
var myMultiArray = convert(myObject);

如果像下面这样创建一个助手函数
pair
,那么标准的键/映射就足够了:

Object.keys(m).map(pair.bind(m))
function pair(x){return [x, this[x]]}

在ES6中,对于(e In o)]

你试过了吗:注意
key1
的顺序。
key4
在原始数组中没有定义。@Floradu88我不太明白这怎么可能是一个重复的问题。我在问如何从对象映射而不是数组进行转换。@dk123删除了注释。@Floradu88谢谢。如果投票支持关闭此线程的其他人至少留下一个解释,那就太好了;优雅简洁,我对JS不太熟悉;我不太明白我该怎么用这个。你能举个例子吗?Bind->Object.keys->Map->@dk123不替换,计算为。例如:
output=Object.keys(input).map(pair.bind(input))
。注意,第二行应该在header@dk123
bind
在旧IE中不起作用,除非已填充。acdcjunior的答案在任何地方都适用。您可以使用
for(VARI原版)
,因为
for。。。in
是对象键。@JanDvorak你说得对,我忽略了它。只是有所改善。谢谢现在更好了:-)请注意,您仍然假设没有人扩展了
对象。prototype
(但这是一个安全的假设)。@JanDvorak。在当前代码中?我在哪里做出这样的假设呢?@acdcjunior当你对(x中的I)进行
时,它会迭代
x
的所有可枚举属性,包括原型链中的属性。执行
Object.prototype.bind=function(){…}
操作时,每个对象都有一个名为
bind
的可枚举属性,此循环将返回该属性。当你这么做的时候,你也会破坏jQuery。+1谢谢,这看起来真的很神奇。由于目前缺乏对ES6的普遍支持,我最终选择了geocar的答案。虽然答案很好,但它确实让我期待即将到来的功能@neil这在2017年失败(chromium/firefox)。你确定会这样吗?@undko遗憾的是,这只是一个提案,最终没有制定ES6。最新的提案是
[…Object.entries(o)]
,我认为它在当前的Firefox/Chrome中是有效的。@neil谢谢!更详细一点,但与循环相比仍有很大改进:-)