object.entries 在 ES5/Vanila javascript

object.entries in ES5/Vanila javascript

我有一个下面的对象。

{name: 'Ryan', Height: '5.6cm'}

在 ES6 中我们有 Object.prototype.entries() 它将 return 数组形式的密钥对值。 Object.prototype.values() 也将 return 值数组。

任何人都可以帮助我如何在不使用 Object.entries 和不使用 Object.values() 的情况下在 ES5 javascript 中实现相同的功能吗?

您可以使用像 core.js 这样的 polyfill 库来导入您想要使用的 polyfill,然后您就可以在代码中使用 ES6 方法。

如果您只想要一个 one-off 函数,您也可以在 eg 上找到 polyfill。 MDN.

对于 Object.prototype.entries() 这将给出:

if (!Object.entries) {
  Object.entries = function( obj ){
    var ownProps = Object.keys( obj ),
        i = ownProps.length,
        resArray = new Array(i); // preallocate the Array
    while (i--)
      resArray[i] = [ownProps[i], obj[ownProps[i]]];
    
    return resArray;
  };
}

如果您不想将它添加到对象范围,您可以将它稍微更改为您自己的函数名称。

@Sirko ,可以用Object.keys()代替Object.entries():

var entriesObj = {name: 'Ryan', Height: '5.6cm'};
// var output = Object.entries(entriesObj).reduce((collector, [key, value]) => {
var output = Object.keys(entriesObj).reduce(function (collector, key) {
  var value = entriesObj[key];
  return Object.assign({}, collector, {
    [key]: 'modified' + value,
  });
}, {});
console.log(output); // {name: "modifiedRyan", Height: "modified5.6cm"}

出于某种原因,我的 PhantomJS 构建没有 Object.entries 但有 Object.assign。您也许还可以使用 for...in 遍历对象属性(我认为这是最古老的方法)。