基于另一个数组

时间:2017-06-08 23:47:32

标签: javascript arrays object

所以,可能会有人会说这是重复的,但我读了很多相对类似的问题,但我仍然无法找到解决这个问题的答案,我甚至试过了一些npm模块声称要解决这个问题,但无济于事......

好吧,我有一个对象数组:

 var objArr = [{ '5': 1,'6': 1,'34': 3,id: 1,question: '12',author: 'Zoran  Stanić' }];

和另一个应该有助于排序第一个数组的数组:

var sortingArr = [ 'id', 'question', 'author', '34', '5', '6' ];

结果应该是这样的:

[{id: 1, question: '12', author: 'Zoran  Stanić', '34': 3, '5': 1, '6': 1}]

我怎样才能做到这一点?

P.S。这些是数据库中的值,objArr的顺序可能与示例中的顺序完全不同,具体取决于db逻辑 - 它是MySQL的东西。

3 个答案:

答案 0 :(得分:0)

注意:您无法对对象的键进行排序,这取决于浏览器的实现......对象键的“顺序”也不重要,只对您或您的用户显示您显示的内容/显示方式它

如果您想以某种方式打印出来,那么您可以执行以下操作:

var arrOfObjects = [{...}];
var sortingArr = [ 'id', 'question', 'author', '34', '5', '6' ];

arrOfObjects.forEach(function(obj) {
   sortingArr.forEach(function(k) {
      console.log(k + ':' + obj[k]);
   });
});

答案 1 :(得分:0)

无法在JS中对对象进行排序。您必须使用Array创建自己的实现。如果您可以使用ES6,Map将保持添加对的顺序。以下链接说明了这一点:

http://www.jstips.co/en/javascript/map-to-the-rescue-adding-order-to-object-properties/

答案 2 :(得分:0)

或者,您可以拥有一个或多个数组,其中每个数组都符合sortingArr的结构,如下所示:

var objArr = [{ '5': 1,'6': 1,'34': 3,id: 1,question: '12',author: 'Zoran  Stanić' }];

var sortingArr = [ 'id', 'question', 'author', '34', '5', '6' ];

var sortedArrsVals = objArr.map(el => 
  sortingArr.map(e => el[e])
)

console.log(sortedArrsVals)