我有一个二维颜色数组:
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}]
我怎样才能做到这一点?
答案 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()方法来实现这一目标。
<强>样本强>
// 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;
答案 2 :(得分:0)
您可以使用js Set从Array中删除重复的实例。
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;