我正在尝试在一个数组上实现filter方法,其中每个元素都是这样的对象:
{
"start": 1234,
"end": 4321,
"count": 0
}
我想在增加count
属性的同时从我的数组中删除重复项。
目前,我只能start
使用以下代码按属性过滤数组:
var temp = {};
myArray = myArray.filter(function(obj) {
if (obj.start in temp) {
return false;
} else {
temp[obj.start] = true;
return true;
}
});
我想要实现的是在这些条件下工作的过滤器(为了更好地解释,我将引用temp
as 中的元素tempObj
和当前对象 as obj
):
- 如果
obj.start
===tempObj.start
&&obj.end
===tempObj.end
,obj.count
+= 1- 如果
obj.start
===tempObj.start
||obj.end
===tempObj.end
,obj.count
=tempObj.count
+ 1- 如果
obj.start
>tempObj.start
&&obj.end
<tempObj.end
,obj.count
=tempObj.count
+ 1- else 添加一个新元素到
temp
withcount
= 1
是否可以使用过滤方法?如果不是,正确的方法是什么?我宁愿不使用任何框架。
编辑:根据 RobG 的请求,为了使问题更清楚,我添加了一个输入和输出示例。
示例输入:
myArray = [{
"start": 1105,
"end": 1501,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1110,
"end": 1120,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1115,
"end": 1120,
"count": 0
}]
期望的输出:
myArray = [{
"start": 1105,
"end": 1501,
"count": 1
},
{
"start": 1105,
"end": 1003,
"count": 3
},
{
"start": 1110,
"end": 1120,
"count": 1
}
{
"start": 1115,
"end": 1120,
"count": 1
}]
这是你想要的?
myArray = [{
"start": 1105,
"end": 1501,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1110,
"end": 1120,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1115,
"end": 1120,
"count": 0
}
]
var obj = {};
for (var i = 0, len = myArray.length; i < len; i++) {
obj[myArray[i]['start']] = myArray[i];
}
myArray = new Array();
var count = 0;
for (var key in obj) {
obj[key].count = count++;
myArray.push(obj[key]);
}
console.log(myArray)
更新的答案。
myArray = [{
"start": 1105,
"end": 1501,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1110,
"end": 1120,
"count": 0
},
{
"start": 1105,
"end": 1003,
"count": 0
},
{
"start": 1115,
"end": 1120,
"count": 0
}
]
function removeDoopCount(myArray) {
const start = x => myArray[x].start;
const end = x => myArray[x].end;
let hash = new Map();
for (var i = 0, len = myArray.length; i < len; i++) {
let key = start(i) + ':' + end(i);
let item = myArray[i];
let values = hash.get(key);
if (values) values.push(item);
else hash.set(key, [item]);
}
let ar = [];
hash.forEach((v, k, m) => (count = 1, v.forEach(i => i.count += count++), ar.push(v[v.length - 1])));
return ar;
}
console.log(removeDoopCount(myArray));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句