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 遍历对象属性(我认为这是最古老的方法)。
我有一个下面的对象。
{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
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 遍历对象属性(我认为这是最古老的方法)。