jQuery将两个数组(键,值)关联到一个数组中

7

如何将包含键和值的两个数组关联成一个带有键-值对的数组?

Mootools中有一个名为associate的函数,它可以完成此操作:

var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
sounds.associate(animals);
// returns {'Cow': 'Moo', 'Pig': 'Oink', 'Dog': 'Woof', 'Cat': 'Miao'}

在JQuery中是否有类似的功能可以得到这两个数组相同的结果?

如果没有,我该如何做到呢?


MooTools比jQuery拥有更多的非DOM方法。你可以使用MooTools代替jQuery...这样你就拥有了来自MooTools的所有DOM方法,以及额外的像.associate()方法这样的糖。 - Sergio
7个回答

6

JavaScript并没有真正的关联数组,但你可以使用对象来代替。

Array.prototype.associate = function (keys) {
  var result = {};

  this.forEach(function (el, i) {
    result[keys[i]] = el;
  });

  return result;
};

var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
console.dir(sounds.associate(animals));

如果在动物数组中有重复的值,并且我想将此值附加到先前的(假设在数组中)值,则返回数字而不是值。变量动物 = ['Cow','Pig','Dog','Cow'];变量声音= ['Moo','Oink','Woof','Miao']; - hitttt

2
你可以使用 Array.prototype.reduce
var keys = ['a', 'b', 'c'],
    values = [1, 2, 3],
    associated = keys.reduce(function (previous, key, index) {
        previous[key] = values[index];
        return previous
    }, {})

console.log(associated) // Object {a: 1, b: 2, c: 3} 

“reduce”不支持IE < 9本地,但您可以安全地使用MDN网站上的Polyfill(链接),您可以使用条件注释仅针对ie < 9。如果您想要一个可重用的函数,很容易做到:”
function associate(keys, values){
    return keys.reduce(function (previous, key, index) {
        previous[key] = values[index];
        return previous
    }, {})
} 

1

不需要jQuery,只需使用纯JS即可实现(这里有一个fiddle):

var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
var assoc = [];
for(var i=0; i<animals.length; i++) {
    assoc[animals[i]] = sounds[i];
}
console.log(assoc);

打印:

Cat: "Miao"
Cow: "Moo"
Dog: "Woof"
Pig: "Oink"

1
您可以编写类似于以下内容的代码:
Array.prototype.associate = function(arr){
    var index,
        output = Object.create(null);

    for(index = 0; index < this.length; index++){
        output[arr[index]] = this[index];
    }

    return output;
};

然后您可以按预期使用它,类似于这样:
var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
var x = sounds.associate(animals);

x中的结果是{'Cow': 'Moo', 'Pig': 'Oink', 'Dog': 'Woof', 'Cat': 'Miao'}


演示 - 复制 Mootool 的关联函数



0
你可以在JavaScript中使用。
Array.prototype.associate= function(){
 var that = this;
 var associated ={};
 var len = that.length;
 for(var i=0; i < len; i++){
    associated[that[i]] = value[i];
 }
 return associated;
 } 
var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
console.log(animals.associate(sounds));

0

for...of 方法

你也可以使用 for...of 语句与 Array.prototype.entries() 结合使用,使用一个数组作为键,另一个数组作为值来创建一个对象:

const array_combine = (keys, values) => {
  const result = {};
  
  for (const [index, key] of keys.entries()) {
    result[key] = values[index];
  }
  
  return result;
};

const animals = ['Cow', 'Pig', 'Dog', 'Cat'];
const sounds  = ['Moo', 'Oink', 'Woof', 'Miao'];

console.log(array_combine(animals, sounds));


0
如果您可以将像lodash这样的依赖项添加到您的项目中,那么它就非常简单:
let result = _.zip([key1, key2], [value1, value2])

这将生成一个新的数组:

[[key1, value1], [key2, value2]]

将结果应用于 lodash 函数 fromPairs:
let finalResult = _.fromPairs(resultArrayFromPreviousCode)

finalResult 现在是:

{ key1: value1, key2: value2 }

希望这能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接