2

我有一些从 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,但行为发生了变化。

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

4

1 回答 1

0

我不知道太妃糖,但对于这类问题,我使用数组助手,正如你提到的对象键的顺序在 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]]);
}    

用于遍历从 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])
    });
});

当然,如果你有更多的字段,你可以在迭代 fields 数组时构造对象,或者将来可能会更改字段。希望这可以帮助。

于 2016-01-08T18:40:07.873 回答