【发布时间】:2015-10-30 12:47:32
【问题描述】:
我们有如下所示的 MongoDB 文档:
var JavascriptObject = {
DbDocs : [
{
_id : "1",
{..more values..}
},
{
_id : "2",
{..more values..}
},
{
_id : "3",
{..more values..}
}
]
}
根据JavascriptObject中的某些值,我们从文档中订购一个_id的数组,结果是这样的:
var OrderedArray = [ 2, 1, 3 ];
现在,我们正在通过将OrderedArray 中的_id 与DbDocs 中的_id 匹配来重建整个JavascriptObject:
var JavascriptObjectToRebuild = [];
var DbDocuments = JavascriptObject.DbDocs;
var DocumentCount = 0;
for (var OrderedNumber in OrderedArray) {
for (var Document in DbDocuments) {
if ( DbDocuments[Document]._id === OrderedArray[OrderedNumber] ) {
JavascriptObjectToRebuild[DocumentCount] = {}; // new Document Object
JavascriptObjectToRebuild[DocumentCount]._id = DbDocuments[Document]._id;
JavascriptObjectToRebuild[DocumentCount]...more values = DbDocuments[Document]...more values;
DocumentCount++; // increment
}
}
}
var SortedJavascriptObject = { DbDocs: [] }; // format for client-side templating
for (var Document in JSONToRebuild) {
SortedJavascriptObject.DbDocs.push(JavascriptObjectToRebuild[Document]);
}
有没有更快更有效的方法来根据这个OrderedArray对JavascriptObject进行排序?
【问题讨论】:
-
_id是独一无二的属性吗? -
这个问题根本没有JSON。 JSON 是一种文本 表示法。当您在 JavaScript 中处理对象和数组时,您就是在处理 JavaScript 对象和数组。您在 JavaScript 代码中处理 JSON 的唯一时间是它在 string 中。
-
有什么理由不能直接在
JSON.DbDocs上拨打sort吗? -
@Maji:我已经更新了我的答案以展示如何将
OrderedArray与sort一起使用,但如果您可以直接而不是间接地实现排序逻辑,它可能会更好。显然,由于问题之外的原因,这可能是不可能的或不可取的...... -
@Akxe:这是 georg 在他的回答中所做的。 :-)
标签: javascript arrays sorting javascript-objects