- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编写一个名为“select”的函数。
给定一个数组
和一个对象
,“select”返回一个新的对象
,其属性是给定对象中的那些
AND 其键
存在于给定的数组
中。
注意事项:
如果给定的 array
中存在键,但不在给定的 object
中,则应忽略它们。
它不会修改传入的对象。
(a)可以过滤array
,看元素是否匹配obj
中的key
(b) 可以创建一个空的对象
作为占位符
(c)可以使用push或者其他方式将匹配到key
的元素添加到新的object
(d) 可以返回新的对象
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 }
最佳答案
您可以映射对象并检查键是否存在,然后返回一个新对象,否则返回一个空对象以分配给单个对象。
Let's have a look to this line
Object.assign(...arr.map(k => k in obj ? { [k]: obj[k] } : {}))
Object.assign
takes objects and returns a single objectObject.assign( )
spread syntax
...
, takes an iterable, like an array and use the items as parameters...
For the paramters take
arr
and map an object for each item of the arrayarr.map( )
This is the callback for
Array#map
k => k in obj ? { [k]: obj[k] } : {}
where a conditional (ternary) operator
?:
with a check within
operator to test if a property exist in the objectk in obj ? :
if exist, then return a new object with a computed property name and the value of the original object
{ [k]: obj[k] }
or if not, return an empty object, which is neutral in sense of the later
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);
实际版本 2020:获取对象的条目。过滤以仅获取想要的对并从这些对构建新对象。
var array = ['a', 'c', 'e'],
object = { a: 1, b: 2, c: 3, d: 4 },
result = Object.fromEntries(Object
.entries(object)
.filter(([k]) => array.includes(k))
);
console.log(result);
关于javascript - 如何在 JavaScript 中使用数组和对象输入编写最快的选择函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494681/
我是一名优秀的程序员,十分优秀!