我很简单:
我有一个Javascript对象,其中包含一些属性,其值为数组,具有以下结构:
let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"],...}
我需要获得一个只包含值的数组,如下所示:
let obj2 = [["xxx@yyy.com"], ["qqq@www.com"], ["asdf"],...]
使用Object.values(obj)
,我得到[["xxx@yyy.com", "qqq@www.com"], ["asdf"],...]
,这不是我想要的,但这是一个很好的起点......
另外,如果可能的话,我正在寻找单行代码。有任何想法吗? 感谢。
答案 0 :(得分:5)
使用函数reduce
的替代方法。
此方法从第一级添加对象和数组。
如您所见,此方法评估对象的类型。
let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]}
var result = Object.values(obj).reduce((a, c) => {
if (Array.isArray(c)) return a.concat(Array.from(c, (r) => [r]));
return a.concat([c]);
}, []);
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

一行方法(不包括检查数组类型):
let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]},
result = Object.values(obj).reduce((a, c) => (a.concat(Array.from(c, (r) => [r]))), []);
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:3)
您可以使用Object.values
获取值数组,然后使用concat
并展开语法...
以获取平面数组,然后使用map
方法。
let obj = {emails: ["xxx@yyy.com", "qqq@www.com"], nickname: ["asdf"]}
const values = [].concat(...Object.values(obj)).map(e => [e])
console.log(values)