所以,可能会有人会说这是重复的,但我读了很多相对类似的问题,但我仍然无法找到解决这个问题的答案,我甚至试过了一些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的东西。
答案 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)