数组的映射值
Mapping values of an array
我的 Json 数组如下
[
{Priority: low,
Status: received
Creator: ABC
},
{Priority: high,
Status: received
Creator: DEF
}
]
我需要映射优先级字段的值,优先级字段必须映射到颜色,值如下
[
{color: Orange,
Status: received
Creator: ABC
},
{color: red,
Status: received
Creator: DEF
}
]
您不需要 lodash 或下划线,Array.prototype.map
可以提供帮助:
let originArray = [
{Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
function getColorFromPriority(priority) {
if (priority === 'low') {
return 'yellow';
} else if (priority === 'high') {
return 'red';
}
}
let resultArray = originArray.map(function(o) {
o.color = getColorFromPriority(o.Priority);
delete o.Priority;
return o;
});
console.log(resultArray);
仅使用 JavaScript 你可以使用 Array.prototype.map() along with Object.keys() 你可以遍历你的数组和 return 另一个带有自定义对象的数组。
这就是你的代码:
var filteredResults = data.map(function(item) {
var obj = {};
Object.keys(item).forEach(function(k) {
if (k !== 'Priority' && item.hasOwnProperty(k)) {
obj[k] = item[k]
} else if (k === 'Priority' && item.hasOwnProperty(k)) {
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
}
});
return obj;
});
演示:
这是一个有效的演示片段:
var data = [{
Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{
Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
var filteredResults = data.map(function(item) {
var obj = {};
Object.keys(item).forEach(function(k) {
if (k !== "Priority" && item.hasOwnProperty(k)) {
obj[k] = item[k]
} else if (k === 'Priority') {
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
}
});
return obj;
});
console.log(filteredResults);
改进:
你可以看到我在这里使用了两个 if
块来测试 Priority
个关卡:
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
如果您有更多 Priority
级别,您最好使用自定义 object
来存储这些级别及其各自的颜色,例如:
var levels = {"low" : "Orange", "high": "Red"}
然后只需使用这些级别 keys
即可获得相应的 Color
,如下所示:
obj['color'] = levels[item[k]];
您可以使用 Array#map
和一个将存储优先级和颜色之间的映射的对象来实现
如果您需要更多优先级颜色 - 将它们添加到 mappingColors
对象中,其余代码保持不变
const data = [{
Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{
Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
const mappingColors = {
low: 'orange',
high: 'red',
}
let finalArray = data.map(d => (d.Color = mappingColors[d.Priority],delete d.Priority, d));
console.log(finalArray);
正如其他答案所述,这可以在没有 Lodash 的情况下完成。要添加一个 Lodash(带有 ES6)选项 none the less:
let arr = [ {Priority: 'low',Status: 'received', Creator: 'ABC'}, {Priority: 'high',Status: 'received', Creator: 'DEF'} ];
let colors = new Map([['low', 'Orange'],['high', 'Red']]);
let res= arr.map(o=> _.assign({color:colors.get(o.Priority)},_.omit(o,'Priority')));
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
我的 Json 数组如下
[
{Priority: low,
Status: received
Creator: ABC
},
{Priority: high,
Status: received
Creator: DEF
}
]
我需要映射优先级字段的值,优先级字段必须映射到颜色,值如下
[
{color: Orange,
Status: received
Creator: ABC
},
{color: red,
Status: received
Creator: DEF
}
]
您不需要 lodash 或下划线,Array.prototype.map
可以提供帮助:
let originArray = [
{Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
function getColorFromPriority(priority) {
if (priority === 'low') {
return 'yellow';
} else if (priority === 'high') {
return 'red';
}
}
let resultArray = originArray.map(function(o) {
o.color = getColorFromPriority(o.Priority);
delete o.Priority;
return o;
});
console.log(resultArray);
仅使用 JavaScript 你可以使用 Array.prototype.map() along with Object.keys() 你可以遍历你的数组和 return 另一个带有自定义对象的数组。
这就是你的代码:
var filteredResults = data.map(function(item) {
var obj = {};
Object.keys(item).forEach(function(k) {
if (k !== 'Priority' && item.hasOwnProperty(k)) {
obj[k] = item[k]
} else if (k === 'Priority' && item.hasOwnProperty(k)) {
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
}
});
return obj;
});
演示:
这是一个有效的演示片段:
var data = [{
Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{
Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
var filteredResults = data.map(function(item) {
var obj = {};
Object.keys(item).forEach(function(k) {
if (k !== "Priority" && item.hasOwnProperty(k)) {
obj[k] = item[k]
} else if (k === 'Priority') {
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
}
});
return obj;
});
console.log(filteredResults);
改进:
你可以看到我在这里使用了两个 if
块来测试 Priority
个关卡:
if (item[k] === 'low') obj['color'] = 'Orange';
else if (item[k] === 'high') obj['color'] = 'Red';
如果您有更多 Priority
级别,您最好使用自定义 object
来存储这些级别及其各自的颜色,例如:
var levels = {"low" : "Orange", "high": "Red"}
然后只需使用这些级别 keys
即可获得相应的 Color
,如下所示:
obj['color'] = levels[item[k]];
您可以使用 Array#map
和一个将存储优先级和颜色之间的映射的对象来实现
如果您需要更多优先级颜色 - 将它们添加到 mappingColors
对象中,其余代码保持不变
const data = [{
Priority: 'low',
Status: 'received',
Creator: 'ABC'
},
{
Priority: 'high',
Status: 'received',
Creator: 'DEF'
}
];
const mappingColors = {
low: 'orange',
high: 'red',
}
let finalArray = data.map(d => (d.Color = mappingColors[d.Priority],delete d.Priority, d));
console.log(finalArray);
正如其他答案所述,这可以在没有 Lodash 的情况下完成。要添加一个 Lodash(带有 ES6)选项 none the less:
let arr = [ {Priority: 'low',Status: 'received', Creator: 'ABC'}, {Priority: 'high',Status: 'received', Creator: 'DEF'} ];
let colors = new Map([['low', 'Orange'],['high', 'Red']]);
let res= arr.map(o=> _.assign({color:colors.get(o.Priority)},_.omit(o,'Priority')));
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>