具有这样的对象数组
"medios":[
{
"Key":"1",
"Text":"Cheque"
},
{
"Key":"2",
"Text":"Tarjeta de Crédito"
},
{
"Key":"3",
"Text":"Tarjeta de Crédito"
},
{
"Key":"4",
"Text":"Tarjeta de Crédito"
},
{
"Key":"5",
"Text":"Transferencia Bancaria"
}
]
我需要能够删除具有相同“文本”值的对象(例如,Tarjeta deCrédito),直到我只保留其中之一。关于如何实现这一目标的任何想法?
我通过对数组使用循环来尝试,但是不知道如何删除特定对象
答案 0 :(得分:2)
您可以使用Text
通过const obj = {"medios":[{ "Key":"1","Text":"Cheque"},{ "Key":"2","Text":"Tarjeta de Crédito"},{ "Key":"3","Text":"Tarjeta de Crédito"},{ "Key":"4","Text":"Tarjeta de Crédito"},{ "Key":"5","Text":"Transferencia Bancaria"}]};
obj.medios = Array.from(new Map(obj.medios.map(m => [m.Text, m])).values());
console.log(obj.medios);
来键入数据,这样您将仅获得唯一的条目。然后从该映射中获取值以再次重建数组:
{{1}}
答案 1 :(得分:2)
您可以使用reduce并在添加元素时不添加元素。
var medios = [{"Key": "1","Text": "Cheque"},{"Key": "2","Text": "Tarjeta de Crédito"},{"Key": "3","Text": "Tarjeta de Crédito"},{"Key": "4","Text": "Tarjeta de Crédito"},{"Key": "5","Text": "Transferencia Bancaria"}];
medios = medios.reduce((c, n) =>
c.find(el => el.Text == n.Text) ? c : [...c, n], []);
console.log(medios);
答案 2 :(得分:1)
您可以将.filter()
数组方法与单独的数组结合使用,以跟踪哪些文本我们已经创建了仅包含所需元素的新数组。第一个条目将保留,因此我们希望在新数组中保留键2,并删除键3和键4。
const data = {
"medios":[
{
"Key":"1",
"Text":"Cheque"
},
{
"Key":"2",
"Text":"Tarjeta de Crédito"
},
{
"Key":"3",
"Text":"Tarjeta de Crédito"
},
{
"Key":"4",
"Text":"Tarjeta de Crédito"
},
{
"Key":"5",
"Text":"Transferencia Bancaria"
}
]
};
const seen = [];
const result = {
"medios": data.medios.filter( entry => {
const already_seen = seen.includes( entry.Text );
if ( already_seen ) return false;
else {
seen.push( entry.Text );
return true;
}
})
};
console.log( result );
答案 3 :(得分:1)
管理此IMHO的最干净方法是通过简单的lodash _.uniqBy()方法:
const medios = [
{
"Key":"1",
"Text":"Cheque"
},
{
"Key":"2",
"Text":"Tarjeta de Crédito"
},
{
"Key":"3",
"Text":"Tarjeta de Crédito"
},
{
"Key":"4",
"Text":"Tarjeta de Crédito"
},
{
"Key":"5",
"Text":"Transferencia Bancaria"
}
]
console.log(_.uniqBy(medios, 'Text'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
答案 4 :(得分:1)
您可以使用lodash中的_.uniqBy通过以下方式使其简洁明了
// medios = [{Key: 1, Text: '' }, {Key: 2, Text: '' } ]
medios = _.uniqBy(medios, 'Text');
答案 5 :(得分:0)
您可以使用reduce
。在reduce回调内部,使用find
检查累加器数组是否包含带有此文本的对象。 find
返回一个布尔值。如果为false,则将当前对象推入累加器
let medios = [{
"Key": "1",
"Text": "Cheque"
},
{
"Key": "2",
"Text": "Tarjeta de Crédito"
},
{
"Key": "3",
"Text": "Tarjeta de Crédito"
},
{
"Key": "4",
"Text": "Tarjeta de Crédito"
},
{
"Key": "5",
"Text": "Transferencia Bancaria"
}
]
let k = medios.reduce((acc, curr) => {
let findText = acc.find((item) => {
return item.Text.toLowerCase() === curr.Text.toLowerCase();
});
if (!findText) {
acc.push(curr)
}
return acc;
}, []);
console.log(k)