JavaScript - "查询"一个东西

时间:2016-01-11 16:19:11

标签: javascript arrays

我想要一种纯粹的JavaScript方式来查询"查询"一个东西。对象如下所示。

[
    {
        "Name": "testName1",
        "Date : "01/01/2016",
        "Volume1 : 1234
        "Volume2 : 1234
    },
    {
        "Name": "testName1",
        "Date : "01/01/2016",
        "Volume1 : 5678
        "Volume2 : 5678
    },
    {
        "Name": "testName1",
        "Date : "01/02/2016",
        "Volume1 : 1234
        "Volume2 : 1234
    },
    {
        "Name": "testName2",
        "Date : "01/01/2016",
        "Volume1 : 1234
        "Volume2 : 1234
    },
    {
        "Name": "testName2",
        "Date : "01/02/2016",
        "Volume1 : 1234
        "Volume2 : 1234
    }
]

我的目标是能够访问每个卷,但需要针对特定​​的名称和日期进行访问。换句话说,我希望以" testName1"返回任何内容的总Volume1。并在日期" 01/01/2016"。

我尝试通过将值附加到JavaScript数组来实现此目的:

var dateArray =[];
var nameArray = [];
for (var i = 0; i < obj.length; i++) {
    if (contains(dateArray,obj[i].date == false) { // contains is a function that checks if an item exists in an array
        dateArray.push(obj[i].date;
    }

}

然后,我通过在名称数组中附加唯一值来对名称执行相同的操作。

我可以通过添加:

来获得数量
volume += obj[i][Volume1]

在我的for循环中;但是,这并不区分日期和名称。

我的思想形式是以某种方式循环遍历我的独特值数组,并在满足某些条件的情况下收集值,但我很难将其放入代码中。

我也想知道是否有更简洁的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

首先关闭你的javascript和json是一团糟。很多缺失的行情和不匹配的括号。

new public static ICollection<string> AllKeys
{
    get
    {    
        return BaseEnum.AllKeys;
    }
}

这些函数调用中的每一个基本上都是执行for循环,以根据您给出的谓词执行特定操作(谓词是一个返回布尔值的函数)。

例如,filter()可以替换为看起来像这样的for循环。

var arr = [ /*your array*/ ];
var total = arr
  //filters so only items with .name === "testName1" remain
  .filter(function(x) { return x.name === "testName1"; })
  //filters so only items with .date === "01/01/2016" remain
  //this could be replaced with a more robust date check
  .filter(function(x) { return x.date === "01/01/2016"; })
  //sums up all of the values of Volume1 of the remaining items.
  .reduce(function(prev, curr, index) { return prev + curr.Volume1;});

当您使用for循环时,有时最好将您的想法分解为每个循环的单个任务。效率较低(执行中)但它可以帮助您将您的想法分解为可管理的块。然后,一旦你真正理解了你的代码,你可以尝试将它们合并回一个循环。