如何将结构添加到作为数据库查询结果创建的对象

How can I add structure to an object created as the result of a db query

我有一些从 Taffy 数据库中提取的代码,用于创建一个对象,然后对其进行迭代。在以前的版本中,对象中元素的顺序是一致的(虽然我意识到这在js中是不能保证的),所以我是通过this[0]this[1]等方式访问的。在新版本(显然是由于 Taffy 错误,https://github.com/typicaljoe/taffydb/issues/109),这种行为是不可靠的,所以我想知道是否有更可靠的方法来构建信息并检索它。一个最小的例子:

var stuffWeCite = TAFFY([{
 "first": 1,
 "second": 2,
 "third": 3,
 "fourth": 4
 }]);

var filterVar = {"first":1};
var someVar = stuffWeCite()
.filter(filterVar)
.select("first", "second", "third", "fourth");

console.log('someVar: ' + someVar);

以前,结果会显示 1、2、3、4,但行为已更改。

如果我将查询的元素一个一个地输入到对象中,我会为它们分配属性("first"、"second" 等),然后稍后调用它们,但他们的选择方式似乎排除了这一点。从数据库查询创建对象时,有没有一种方法可以将属性分配给值?

我不知道 taffy,但对于此类问题,我使用数组助手,正如你提到的 javascript 中对象键的顺序不可靠。您可以声明一个数组,该数组按照您想要使用的顺序保存对象的键,然后迭代它以从对象中按顺序获取值:

var stuffWeCite = TAFFY([{
    "second": 2,
    "first": 1,
    "fourth": 4
    "third": 3,
}]);

var array = ['first', 'second', 'third', 'fourth'];

array.forEach(function(item) {
    console.log(stuffWeCite[item]);
});

或使用 for 循环:

var stuffWeCite = TAFFY([{
    "second": 2,
    "first": 1,
    "fourth": 4
    "third": 3,
}]);

var array = ['first', 'second', 'third', 'fourth'];

for (var i = 0, l = array.length; i<l; i++) {
    console.log(stuffWeCite[array[i]]);
}    

为了遍历从数据库接收到的一组对象,考虑到没有。您要使用的字段数量较少,因此没有必要迭代数组:

var friendsInSeattle = friends({city:"Seattle, WA"});
var fieldsInOrder = ['id', 'gender', 'first', 'last'];

friendsInSeattle.forEach(function(friend) {
    console.log({
        fieldsInOrder[0]: friend(fieldsInOrder[0]),
        fieldsInOrder[1]: friend(fieldsInOrder[1]),
        fieldsInOrder[2]: friend(fieldsInOrder[2]),
        fieldsInOrder[3]: friend(fieldsInOrder[3])
    });
});

当然你可以在遍历fields数组的同时构造对象,如果你有更多的字段,或者将来字段可能会发生变化。 希望这有帮助。