Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何向作为db查询结果创建的对象添加结构_Javascript_Arrays_Database_Properties_Taffydb - Fatal编程技术网

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

Javascript 如何向作为db查询结果创建的对象添加结构,javascript,arrays,database,properties,taffydb,Javascript,Arrays,Database,Properties,Taffydb,我有一段代码是从一个太妃糖数据库中提取出来的,用来创建一个对象,然后进行迭代。在以前的版本中,对象中元素的顺序是一致的(虽然我意识到这在js中是不保证的),所以我通过这个[0],这个[1]等访问它们。在新版本中(显然是由于太妃糖bug),这种行为是不可靠的,因此,我想知道是否有一种更可靠的方法来构造信息并检索它。一个简单的例子: var stuffWeCite = TAFFY([{ "first": 1, "second": 2, "third": 3, "fourth": 4 }])

我有一段代码是从一个太妃糖数据库中提取出来的,用来创建一个对象,然后进行迭代。在以前的版本中,对象中元素的顺序是一致的(虽然我意识到这在js中是不保证的),所以我通过
这个[0]
这个[1]
等访问它们。在新版本中(显然是由于太妃糖bug),这种行为是不可靠的,因此,我想知道是否有一种更可靠的方法来构造信息并检索它。一个简单的例子:

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查询创建对象时,有没有一种方法可以将属性分配给值?

我不知道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]]);
}    
当然,如果有更多字段,或者字段将来可能会更改,则可以在迭代字段数组时构造对象。
希望这能有所帮助。

我运行的是一个非常小的数据库(几百个条目),但这种方法是否会因为输出的每个元素都需要对数据库进行多次调用而大大增加计算开销?对于上下文,我之前调用过db一次,然后遍历结果对象,并使用
this
打印值。这样做,似乎每次查询我需要调用数据库多达160次——这是一个显著的减速吗?不完全是这样,因为我了解taffydb是基于内存的数据库,所以所有操作数据库请求等都发生在内存中,因此速度应该不会有太多问题,因为不会有电缆或硬盘访问的等待时间。但无论如何,您仍然可以查询数据库一次,获取记录集,并遍历记录集和字段数组。我只是在上面添加了一个小例子。当然,有一个开销增加了字段的另一个迭代,但是我认为它可以忽略您想要的结果,这是肯定的,并且不会依赖于对象键中的顺序。我强烈建议不要依赖JS对象键中的顺序。这可能会让您大吃一惊,使用不同的浏览器、库等,它们会定期更新,而且由于对象中的键顺序在标准中没有强制执行,因此非常不可靠,它们可以在下一个版本中打破它而不打破ecma标准。
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])
    });
});