数组&对象 - 替代'价值从一个到另一个

时间:2015-07-07 20:02:10

标签: javascript arrays object

我有

var lookupMap。这是一段摘录:

{ ANDERSON: { county: 'ANDERSON', code: 'us-tx-001' },  
ANDREWS: { county: 'ANDREWS', code: 'us-tx-003' } ,
WARD: { county: 'WARD', code: 'us-tx-475' },
WASHINGTON: { county: 'WASHINGTON', code: 'us-tx-477' },
WEBB: { county: 'WEBB', code: 'us-tx-479' }}

它是县的长索引及其相应的代码。并非所有都会被使用。

我有var uniquedata,看起来像:

[ 'us-tx-477', 'us-tx-479' ]

这是一个代码数组。

我也有var结果,看起来像:

{ WASHINGTON: 9, WEBB: 4 }.

基本上,我现在要做的是从uniquedata中查看元素,并为每个元素查找它所属的县,并用代码替换县名,但保持计数相同。

因此,例如,输出应为:

{ 'us-tx-477' : 9,

 'us-tx-479': 4}

最好的方法是什么?我试图隔离元素时遇到麻烦......这看起来真的很混乱。我无法绕过它。

1 个答案:

答案 0 :(得分:0)

遍历uniquedata中的每个项目并在数据对象中进行查找。 函数findInLookupMap遍历lookupmap中的每个对象,并返回代码的县名。

像这样的东西

var cache = {}; 
function findInLookupMap(key){
  if(cache[key]) return cache[key]; // <--- cache to avoid looping in further requests
  for(var o in data){ 
    if(data[o].code == key){
      cache[key] = data[o].county;
      return data[o].county;
    }
  }
}

var output = {};
for(var i=0;i<uniquedata.length;i++){ // <--- iterate through each item in uniquedata
  var code = findInLookupMap(uniquedata[i]);
  output[uniquedata[i]] = results[code];
}
console.log(output);

&#13;
&#13;
var lookupMap = {
  "ANDERSON": {
    "county": 'ANDERSON',
    "code": 'us-tx-001'
  },
  "ANDREWS": {
    "county": 'ANDREWS',
    "code": 'us-tx-003'
  },
  "WARD": {
    "county": 'WARD',
    "code": 'us-tx-475'
  },
  "WASHINGTON": {
    "county": 'WASHINGTON',
    "code": 'us-tx-477'
  },
  "WEBB": {
    "county": 'WEBB',
    "code": 'us-tx-479'
  }
};
var uniquedata = ['us-tx-477', 'us-tx-479'];

var results = {
  WASHINGTON: 9,
  WEBB: 4
};
var cache = {};

function findInLookupMap(key) {
  if (cache[key]) return cache[key];
  for (var o in lookupMap) {
    if (lookupMap[o].code == key) {
      cache[key] = lookupMap[o].county;
      return lookupMap[o].county;
    }
  }
}
var output = {};
for (var i = 0; i < uniquedata.length; i++) {
  var code = findInLookupMap(uniquedata[i]);
  output[uniquedata[i]] = results[code];
}
console.log(output);
&#13;
&#13;
&#13;