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

时间:2016-01-08 18:18:46

标签: javascript arrays database properties taffydb

我有一些从Taffy数据库中提取的代码,用于创建一个然后迭代的对象。在以前的版本中,对象中元素的顺序在顺序上是一致的(虽然我意识到这在js中无法保证),所以我通过this[0]this[1]等访问它们。新版本(显然是由于Taffy bug,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,但行为已经改变。

如果我一个接一个地将查询元素输入到一个对象中,我会为它们分配属性("第一个","第二个"等等)然后稍后调用它们,但它们被选中的方式似乎排除了这一点。有没有办法在从db查询创建对象时为属性赋值?

1 个答案:

答案 0 :(得分:0)

我不知道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 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]]);
}    

用于迭代从db接收的一组对象,考虑否。你想要使用的字段很小,所以没有必要迭代数组:

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])
    });
});

当然,如果您有更多字段,或者字段可能在将来发生变化,您可以在迭代字段数组时构造对象。 希望这会有所帮助。