object.assign不在IE上工作

时间:2018-02-12 04:07:37

标签: javascript jquery

我正在尝试使用自定义排序对设置对象数据进行排序。经过研究,我发现object.assign可以做到这一点。此代码在Chrome上正常运行但在IE10 / 11上显示语法错误。有没有其他方法可以解决这个问题? 谢谢。

var obj = {
  "name4": [{
    "area": "area4"
  }],
  "name2": [{
    "area": "area2"
  }],
  "name1": [{
    "area": "area1"
  }],
  "name3": [{
    "area": "area3"
  }]
};

console.log(obj);

var tempObj = Object.assign(...['name1', 'name2', 'name3', 'name4'].map(k => ({
  [k]: obj[k]
})));

console.log(tempObj);

1 个答案:

答案 0 :(得分:0)

Object.assign()方法用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 它应该用于克隆,合并对象。

以下是来自MDNObject.assign的填充。

if (typeof Object.assign != 'function') {
// Must be writable: true, enumerable: false, configurable: true
 Object.defineProperty(Object, "assign", {
 value: function assign(target, varArgs) { // .length of function is 2
  'use strict';
  if (target == null) { // TypeError if undefined or null
    throw new TypeError('Cannot convert undefined or null to object');
  }

  var to = Object(target);

  for (var index = 1; index < arguments.length; index++) {
    var nextSource = arguments[index];

    if (nextSource != null) { // Skip over if undefined or null
      for (var nextKey in nextSource) {
        // Avoid bugs when hasOwnProperty is shadowed
        if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
          to[nextKey] = nextSource[nextKey];
        }
      }
    }
  }
  return to;
},
writable: true,
configurable: true
});
}

您可以使用此功能对对象进行排序

const orderBy = (arr, props, orders) =>
  [...arr].sort((a, b) =>
    props.reduce((acc, prop, i) => {
      if (acc === 0) {
      const [p1, p2] = orders && orders[i] === 'desc' ? [b[prop], a[prop]] : 
      [a[prop], b[prop]];
      acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
     }
    return acc;
  }, 0)
);

示例:

`const users = [{ name: 'fred', age: 48 }, { name: 'barney', age: 36 }, { name: 'fred', age: 40 }];`

`orderBy(users, ['name', 'age'], ['asc', 'desc']); // [{name: 'barney', age: 36}, {name: 'fred', age: 48}, {name: 'fred', age: 40}]`

`orderBy(users, ['name', 'age']); // [{name: 'barney', age: 36}, {name: 'fred', age: 40}, {name: 'fred', age: 48}]`

谢谢,我希望这会有所帮助。保持正确的编码方式!

TL:DR; 我研究了你发布的对象并做了一些调整。

const obj1 = [{"name":"area1", "id": "4"},{"name":"area2", "id": "2"},
{"name":"area3", "id":"1"},{"name": "area4", "id": "3"}];

console.log(orderBy(obj1, ['id'], ['asc']));
console.log(orderBy(obj1, ['id'], ['desc']));
console.log(orderBy(obj1, ['name'], ['asc']));
console.log(orderBy(obj1, ['name'], ['desc']));

抱歉,我不得不再次添加它并使其长。如果您对解决方案有任何其他问题,请告诉我。