Jquery将两个数组(键,值)关联到一个具有重复键的数组中

时间:2014-12-04 13:55:56

标签: javascript

如果数组是

,请提前感谢
var animals = ['Cow', 'Cow', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];

如何获得像这样的关联数组

 // returns {'Cow': 'Moo', 'Cow': 'Oink', 'Dog': 'Woof', 'Cat': 'Miao'}

2 个答案:

答案 0 :(得分:1)

所有3个选项中的JS小提琴:http://jsfiddle.net/ysLvfxmd/2/

你想要一个哈希/关联数组,循环并通过索引创建一个,但是你不能在哈希中有重复的键,所以你可能想要探索其他数据结构。

Pure Hash

var animals = ['Cow', 'Cow', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
var hash = {};

for(i = 0; i < animals.length; i++) {
    hash[animals[i]] = sounds[i];
}

console.log(hash);

这只会显示Cow一次,如果你想要使用非唯一键对,你需要制作一个哈希数组

哈希数组

var animals = ['Cow', 'Cow', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
var arr = [];

for(i = 0; i < animals.length; i++) {
    var hash = {};
    hash[animals[i]] = sounds[i];
    arr.push(hash);
}

console.log(arr);

但是,请注意,数组的索引现在是数字的,但您可以搜索它以查找您的值。

第三种选择:

阵列哈希(最佳)

//Paul Rob's suggestion hash of arrays

var animals = ['Cow', 'Cow', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
var hashOfArr = [];

for(i = 0; i < animals.length; i++) {
    if(!hashOfArr[animals[i]]){
        hashOfArr[animals[i]] = [];
    }
    hashOfArr[animals[i]].push(sounds[i]);
}
console.log(hashOfArr);

答案 1 :(得分:0)

简短回答

你真正想要的是不可能的。对象不能有多个键。

我的建议

有一个对象,其中每个键的值是一个数组。如果一只动物有多个声音,你只需将它推入阵列即可。

var
animals = ['Cow', 'Cow', 'Dog', 'Cat'],
sounds = ['Moo', 'Oink', 'Woof', 'Miao'],
result = {};

for(i = 0; i < animals.length; i++) {
    result[animals[i]]
        ? result[animals[i]].push(sounds[i])
        : result[animals[i]] = [sounds[i]];
}

Fiddle