写了一个名为“选择”功能。
给定一个array
和object
“选择”返回一个新object
,其特性是在给定的object
那些,其keys
存在于给定array
。
笔记:
array
,但不是在给定的object
,它应该忽略他们。(a)中可以过滤array
以查看是否元件在key
的obj
匹配
(b)中可以创建一个空object
作为占位符
(c)中可以使用推或其它方法来添加匹配的key
到新object
元素
(d)可以返回新object
var arr = ['a', 'c', 'e'];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
function select(arr, obj) {
var nuObj = {};
for (var i in arr) {
for (var key in obj) {
if (arr[i] === key) {
nuObj[key] = obj[key];
}
}
} return nuObj;
}
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }
你可以映射对象,并检查是否存在的关键,然后返回一个新的对象,否则分配到一个一个的空对象。
让我们来看看这条线
Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}))
Object.assign
需要的对象,并返回一个单一的对象Object.assign( )
spread syntax
...
,需要一个可迭代,如阵列,并且使用的项目作为参数...
对于所采取的参数qazxsw POI并映射对象阵列的每个项
arr
这是
arr.map( )
回调Array#map
其中与
k => k in obj ? { [k]: obj[k] } : {}
支票一个conditional (ternary) operator?:
测试如果属性中的对象存在in
operator如果存在,则返回一个新的对象与
k in obj ? :
和原始对象的值computed property name或者如果没有,则返回一个空的对象,这是中性的后
{ [k]: obj[k] }
的感Oject.assign
{}
或者使用功能更强大的方式与以前的滤波自己的属性。
var arr = ['a', 'c', 'e'],
obj = { a: 1, b: 2, c: 3, d: 4 },
result = Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}));
console.log(result);
您可以使用var arr = ['a', 'c', 'e'],
obj = { a: 1, b: 2, c: 3, d: 4 },
result = Object.assign(...arr
.filter(Object.prototype.hasOwnProperty, obj)
.map(k => ({ [k]: obj[k] }))
);
console.log(result);
:
.reduce()
您可以使用var arr = ['a', 'c', 'e'];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
};
var select = (arr, obj) => arr.reduce((r, c) => (c in obj ? r[c] = obj[c] : r, r), {});
console.log(select(arr, obj));
您可以使用var arr = ['a', 'c', 'e'];
var obj = {a: 1,b: 2,c: 3,d: 4};
let op = arr.reduce( (op, inp) => {
if(obj[inp]){
op[inp] = obj[inp]
}
return op
},{})
console.log(op)
在reduce()
:
arr
然而,你的代码的简化版本,可能是这样:
var arr = ['a', 'c', 'e'];
var obj = {a: 1, b: 2, c: 3, d: 4};
let res = arr.reduce((acc, curr) =>
{
if (obj.hasOwnProperty(curr))
acc[curr] = obj[curr];
return acc;
}
,{});
console.log(res);
那么,这是更短:
var arr = ['a', 'c', 'e'];
var obj = {a: 1, b: 2, c: 3, d: 4};
function select(arr, obj)
{
var nuObj = {};
for (let key in obj)
{
if (arr.includes(key))
nuObj[key] = obj[key];
}
return nuObj;
}
var output = select(arr, obj);
console.log(output);
与function select(arr, obj) {
var resultObj = {};
for (var value of arr) value in obj && (resultObj[value] = obj[value])
return resultObj;
}
+ Object.keys
循环工作为好,但要慢得多
for