use*_*ert 16 javascript ecmascript-6
我正在使用Object.entries,以便从嵌套对象中获取一些值并过滤它.
obj = Object.entries(obj)
.filter(([k, v]) => {
return true; // some irrelevant conditions here
});
Run Code Online (Sandbox Code Playgroud)
我的对象最终成为一个数组,键和val的数组.
[['key1', val]['key2', val']['key3', val]]
Run Code Online (Sandbox Code Playgroud)
有没有一种直接的方法将这些映射回对象?原始对象结构是:
{ key:val, key2:val2, key3:val3 }
Run Code Online (Sandbox Code Playgroud)
Cer*_*nce 25
当然,只需使用.reduce分配给一个新对象:
const input = { key:'val', key2:'val2', key3:'val3' };
const output = Object.entries(input)
.filter(([k, v]) => {
return true; // some irrelevant conditions here
})
.reduce((accum, [k, v]) => {
accum[k] = v;
return accum;
}, {});
console.log(output);Run Code Online (Sandbox Code Playgroud)
chi*_*ens 12
对于新浏览器,使用 Object.fromEntries:
Object.fromEntries(arr);
Run Code Online (Sandbox Code Playgroud)
对于较旧的 js,它仍然可以是one liner。
arr.reduce((acc,[k,v])=>(acc[k]=v,acc),{})
Run Code Online (Sandbox Code Playgroud)
例子:
Object.entries(sampleObject) // Turn object to array
.reduce((acc,[k,v])=>(acc[k]=v,acc),{}) // Turn it back to object.
Run Code Online (Sandbox Code Playgroud)
将Object.assign与map [k,v]=> 的地图一起使用{[k]: v}
例如,下面的代码只会以键开头 key
var obj = {
key: 1,
key2: 2,
key3: 3,
removed: 4,
alsoRemoved: 5
}
obj = Object.assign({}, ...Object.entries(obj)
.filter(([k, v]) => {
return k.startsWith('key');
})
.map(([k, v]) => ({[k]: v}))
);
console.log(obj);Run Code Online (Sandbox Code Playgroud)