给定一个javascript对象,如何将其转换为ECMAScript-6中的数组?
例如,给定:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
预期输出为:
['foo', [1,2,3], null, 55]
结果中元素的顺序对我来说并不重要。
答案 0 :(得分:78)
Array::map
使用keys
arrow function object iterator(仅限简短语法,不是功能):
let arr = Object.keys(obj).map((k) => obj[k])
真正的ES6风格是编写生成器,并将该迭代转换为数组:
function* values(obj) {
for (let prop of Object.keys(obj)) // own properties, you might use
// for (let prop in obj)
yield obj[prop];
}
let arr = Array.from(values(obj));
令人遗憾的是,没有{{3}}成为ES6原住民。
答案 1 :(得分:31)
只需使用Object.values
Object.values(inputObj); // => ['foo', [1,2,3], null, 55]
答案 2 :(得分:9)
这可以使用Array Comprehension syntax:
来实现[for (key of Object.keys(inputObj)) inputObj[key]]
用法示例:
var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
var arr = [for (key of Object.keys(inputObj)) inputObj[key]];
console.log(arr);
// prints [ 'foo', [ 1, 2, 3 ], null, 55 ]
答案 3 :(得分:8)
我喜欢旧学校的方式:
var i=0, arr=[];
for (var ob in inputObj)
arr[i++]=ob;
如果不是upvotes,旧学校将大幅度赢得jsperf test。有时候新增加的是“错误特征”。"
答案 4 :(得分:2)
Array.map
相当于@Bergi的箭头功能(有关Array.map
的更多信息,请参阅MDN)
var obj = {a:'foo', b:[1,2,3], c:null, z:55}
,nwarr = Object.keys(obj).map( function (k) {return obj[k];} );
答案 5 :(得分:2)
作为总结,在ES6中,有以下三种(3)变体将对象转换为数组:
const MyObjects = { key1: 'value 1', key2: 'value 2', };
// Method 1: Converts the keys to Array
// --------------------------------------
Object.keys(MyObjects);
// ['key1', 'key2']
// Method 2 Converts the Values to Array
// --------------------------------------
Object.values(MyObjects);
// ['value 1', 'value 2']
// Method 3 Converts both Values and Keys
// --------------------------------------
Object.entries(MyObjects);
// [ ['key1', 'value 1'], ['key2', 'value 2'] ]
将数组转换回对象可以完成以下操作:
const array = [ ['one', 1], ['two', 2], ];
Object.fromEntries(array);
// { one: 1, two: 2 }
答案 6 :(得分:1)
ES7方式:
let obj = { a: "foo", b: "bar", c: 1, d: [1, 2, 3, 4] }
Object.values(obj)
// output --> ['foo', 'bar', 1, [1, 2, 3, 4]
答案 7 :(得分:0)
use regex::Regex;
fn main() {
let cd="rust";
ok_but_i_dont_want_it(cd);
compiler_err(cd);
}
fn ok_but_i_dont_want_it(cd:&str){
let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(" rust ","${ident}_{}");
println!("{}",cd);
}
fn compiler_err(cd:&str){
let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
println!("{}",cd);
}
这里有两个对象,我将使用 2 种方法将两个对象分配到数组中
error: there is no argument named `ident`
--> src/main.rs:18:47
|
18 | let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
| ^^^^^^^
error[E0277]: expected a `FnMut<(®ex::Captures<'_>,)>` closure, found `String`
const address = {
street: "bew1111",
city: "err111",
country: "ind11"
};
const address2 = {
street: "bewscxsd",
city: "errdc",
country: "indcdsc"
};
第一个从这里开始-----
Object.entries()
在这里我将地址分配到 Object.keys()
中,当你运行它时,你会得到这样的输出
var firstar = Object.entries(address);
第二个从这里开始
firstar
这里我将 address2 分配到 (3) [Array(2), Array(2), Array(2)]
中,当你运行它时,你会得到这样的输出
var secstar = Object.keys(address2);