将一个数组的每个国家映射到另一个数组的每种颜色

Javascript: mapping each country of an array to each color of another array

本文关键字:数组 另一个 颜色 映射 国家 一个      更新时间:2023-09-26

我有两个数组,基本上是国家和颜色,我想绑定这两个数组的每一项。我尝试了一个函数,但不工作…

function mapColor(){
   var countries = ["UK", "INDIA", "FRANCE", "CHINA"];
   var colors = ["#807dba", "#41ab5d", "#DECF3F", "#FAA43A"];
   var obj ={};
   for(i=0, j=0; i<countries.length; i++, j<colors.length, j++){
         obj[countries[i]] = colors[j]; 
   }
    return obj;
   };

和期望对象应该是。

 {"UK":"#807dba","INDIA":"#41ab5d","FRANCE":"#DECF3F","CHINA":"#FAA43A"}

你把它弄得太复杂了。

for (i=0; i<countries.length; i++){
    obj[countries[i]] = colors[i]; 
}

countries.forEach( function (val, ind){ obj[val] = colors(ind); });

您可以这样使用reduce:

function mapColor(){
   var countries = ["UK", "INDIA", "FRANCE", "CHINA"],
       colors = ["#807dba", "#41ab5d", "#DECF3F", "#FAA43A"];
    return countries.reduce(function(obj, country, index){
      obj[country] = colors[index];
      return obj;
    }, {});
   };

reduce()方法对累加器和每个累加器应用函数数组的值(从左到右)必须将其减少为单个价值。

既然在同一个函数中定义了数组,为什么不这样做呢:

function mapColor() {
   var obj = {};
   obj['UK'] = '#807dba';
   ...
   return obj;
}

或者如果数组要传入,则:

假设数组总是相同的长度:

function mapColor(countries, colors) {
   var obj = {};
   if (countries.length != colors.length) {
       alert('Countries and Colors array should be of the same length');
       return null;
   }
   for (var i = 0; i < countries.length; i++) {
      obj[countries[i]] = colors[i];
   }
   return obj;
}

如果不能保证它们的长度相同:

function mapColor(countries, colors) {
   var minLength = Math.min(countries.length, colors.length),
       obj = {};

   for (var i = 0; i < minLength; i++) {
      obj[countries[i]] = colors[i];
   }
   return obj;
}
var countries = ["UK", "INDIA", "FRANCE", "CHINA"];
var colors = ["#807dba", "#41ab5d", "#DECF3F", "#FAA43A"];
var result = [];
$.each(countries, function(index, value){
    result[value] = colors[index];
});
console.info(result);
// Result : [UK: "#807dba", INDIA: "#41ab5d", FRANCE: "#DECF3F", CHINA: "#FAA43A"]