按索引字符串值在Javascript对象中搜索

时间:2015-05-06 08:45:45

标签: javascript object

我正在尝试迭代一个多维对象。我有字符串,我必须在对象索引中匹配并获取该值。 例如:

var datasets = {
    "usa:::west": {
        label: "USA",
        data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
    },        
    "russia:::north": {
        label: "Russia",
        data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
    }
};

在这种情况下,我只在对象中使用字符串“usa”,索引是“usa ::: west”。我该如何搜索?

2 个答案:

答案 0 :(得分:2)

正如我所理解的那样,这可能是你以后的事情:

var getKeys = function(query) {
  var keys = Object.keys(datasets).filter(function(key) {
    return !!~key.indexOf(query);
  });

  return keys;
};

其中getKeys('usa');返回数组['usa:::west']。例如getKeys(':::');将返回['usa:::west', 'russia:::north']

答案 1 :(得分:0)

一种方法是迭代数据集的键并尝试匹配键的开头:

var search = 'usa';
var keys = Object.keys(datasets);
for (var key in keys) {
    if (key.indexOf(search) === 0) {
        var values = datasets[key];
        // from here on you have access to label, data, etc
    }
}