基本描述
语法
Object.entries(obj)
参数
- obj 想返回由可枚举属性名和对应属性值组成的的键值对的对象
返回值
一个给定对象自己的枚举属性[key,value]对的数组
polyfill
之前提过Object.keys
和Object.values
,加上这个Object.entries
,可以组成一个全家桶了,一个返回键,一个返回值,一个返回键值组成的数组。说到这里它的polyfill思路很明确了。
if(!Object.entries){
Object.entries = function(obj){
obj = Object(obj);
var keys = Object.keys(obj);
var length = keys.length;
var rst = [];
for(var i=0;i< length;i++){
rst[i] = [keys[i],obj[keys[i]]];
}
return rst;
}
}
这个实现思路和underscore.js中的_.pairs
是一个思路。
MDN上提供的一个github链接,这个方案的思路和Object.values
的思路是一致的,需要说明的点之前已经说过了。
const reduce = Function.bind.call(Function.call, Array.prototype.reduce);
const isEnumerable = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable);
const concat = Function.bind.call(Function.call, Array.prototype.concat);
const keys = Reflect.ownKeys;
if (!Object.entries) {
Object.entries = function entries(O) {
return reduce(keys(O), (e, k) => concat(e, typeof k === 'string' && isEnumerable(O, k) ? [[k, O[k]]] : []), []);
};
}