将二维数组转换为没有重复的对象数组

时间:2017-03-30 01:11:36

标签: javascript arrays object

我有一个二维颜色数组:

var colors = [["Blue", "Red"],["Green","Red"],["Black","Orange"],["Red", "Blue"]]

我想把它变成一个对象数组,并且我已成功地使用.map

obj = colors.map(function(x) {return
{    
    "color1": x[0],
    "color2": x[1]  
}});

但是我希望新的对象数组能够排除重复项,并且只是提到的颜色列表(而不是color1和color2,组合成一个)。新数组应具有以下格式:

[{"color": Blue},
 {"color": Red},
 {"color": Green},
 {"color": Black},
 {"color": Orange}]

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

简单的javascript。

var colors = [["Blue", "Red"],["Green","Red"],["Black","Orange"],["Red", "Blue"]]

var map = {};
var result = [];
colors.forEach(
    function (pair) {
      pair.forEach(
          function (color) {
            if (!map.hasOwnProperty(color)) {
              result.push(color);
            }
            map[color] = 1;
          })
    }
);

console.log(result);

在更高版本的javascript中,这更容易实现。例如,您可以使用Set类型进行重复数据删除。

使用一个漂亮的实用程序库更容易。例如在lodash中:

_(colors).flatten().uniq().value();

答案 1 :(得分:0)

我们可以使用数组filter()& map()方法来实现这一目标。

<强>样本

&#13;
&#13;
// Initial multidimensional array.
var colors = [
               ["Blue", "Red"],
               ["Green","Red"],
               ["Black","Orange"],
               ["Red", "Blue"]
             ];

// Merged colors into single dimensional array.
var merged = [].concat.apply([], colors);

// Apply array filter() method to remove the duplicates.
var filteredData = merged.filter(function(item, index) { 
  return merged.indexOf(item) == index 
});

// Create an array of objects from the array "filteredData".
var res = filteredData.map(function(item) {
  return {    
    "color": item
  }
});

// result
console.log(res);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用js Set从Array中删除重复的实例。

&#13;
&#13;
var colors = [["Blue", "Red"],["Green","Red"],["Black","Orange"],["Red", "Blue"]];
//Merge array
var merged = [].concat.apply([], colors);
//Remove duplicates
var removeDuplicates = Array.from( new Set(merged));  
//create the array of object
var o = removeDuplicates.map(function(obj) { 
	 return {"color":obj};
});

console.log(o);
&#13;
&#13;
&#13;

fiddle