javascript数组对象中的组项
我有一个javascript数组对象:javascript数组对象中的组项,javascript,arrays,Javascript,Arrays,我有一个javascript数组对象: var items = [ {address: 'abc'}, {address: 'abc'}, {address: 'abc'}, {address: 'abc'}, {address: 'wer'}, {address: 'xyz'}, {address: 'xyz'}, {address: 'xyz'} ]; 我想做的是把2个项目
var items = [
{address: 'abc'}, {address: 'abc'}, {address: 'abc'},
{address: 'abc'}, {address: 'wer'}, {address: 'xyz'},
{address: 'xyz'}, {address: 'xyz'}
];
我想做的是把2个项目看作一个项目。如果项目地址重复两次。。我认为这是一个项目。单个唯一项将被视为一个
我希望它的输出如下:
[
{address: 'abc'}, {address: 'abc'},
{address: 'wer'},
{address: 'xyz'}, {address: 'xyz'}
];
abc , abc , abc SHOULD BE abc, abc
xyz , xyz, xyz SHOULD BE xyz, xyz
wer SHOULD BE wer
以上是预期输出
这个概念是这样的:
[
{address: 'abc'}, {address: 'abc'},
{address: 'wer'},
{address: 'xyz'}, {address: 'xyz'}
];
abc , abc , abc SHOULD BE abc, abc
xyz , xyz, xyz SHOULD BE xyz, xyz
wer SHOULD BE wer
到目前为止,我尝试的是:
var items = [
{address: 'abc'}, {address: 'abc'}, {address: 'abc'},
{address: 'abc'}, {address: 'wer'}, {address: 'xyz'},
{address: 'xyz'}, {address: 'xyz'}
];
var itemsNew = [];
var preItem = '';
var a = 1;
var x = false;
for(var i = 0; i < items.length; i++){
var itemDeliveryAddress = items[i].address;
if(a == 2){
if(preItem == itemDeliveryAddress){
preItem = '';
a=1;
}
else {
preItem = '';
a=1;
itemsNew.push(itemDeliveryAddress);
}
}
else {
a++;
preItem = itemDeliveryAddress;
itemsNew.push(itemDeliveryAddress);
}
}
注意:我已经按升序对数组进行了排序您可以使用计数器对其进行过滤,然后单击“下一步”
filter()
方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素
此建议使用thisArg
,一个真正的空对象作为回调中的This
对象
基本上,这个[a.address]
是计数器,如果不存在,则用零初始化,然后递增一
计数后,计数器用于返回。如果该值为奇数,则该项将包含在结果集中
虽然这个
在所有回调中都是持久的,但是不需要排序,因为计数器不需要特定的顺序
var items=[{address:'abc'},{address:'abc'},{address:'abc'},{address:'wer'},{address:'xyz'},{address:'xyz'},{address:'xyz'},{address:'xyz'},
结果=项。过滤器(函数(a){
这个[地址]=(这个[地址]| | 0)+1;
返回此[a.地址]%2;
},Object.create(null));
控制台日志(结果)代码>您可以使用来修改就地阵列
//初始化数组(已排序)
var items=[{address:'abc'},{address:'abc'},{address:'abc'},{address:'wer'},{address:'xyz'},{address:'xyz'},{address:'xyz'},};
var groupedProperty=“地址”//修改此字符串以更改分组依据的属性
//遍历排序数组
对于(var i=1;ii)自动向后移动
控制台日志(项目)
在预期的输出中,您使用JSON格式,并通过插入新行进行分组。这就是你想要的输出吗?或者你正在描述一个你想要的东西?请注意,您没有对任何内容进行分组,甚至在该对象中也没有分组。它只是一个包含5个元素的数组。事实上,在逗号后添加换行符并不会对这样的对象带来任何更改。我希望以JSON格式输出。好的是,使用splice,并希望保留每对对象中的一个,标记正好对齐,因此不需要对I
进行任何损坏你能解释一下这段代码吗。。我想了解代码的每一步。我还需要先对数组排序吗?@Hassandar。DoneYour代码在这个数组中运行不正常:var items=[{deliveryAddress:'Airport Rd'},{deliveryAddress:'Airport Rd'},{deliveryAddress:'Lahore'},{deliveryAddress:'Lahore'},{deliveryAddress:'Lahore'},{deliveryAddress:'Lahore'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'}];您是否修改了代码以便项[i]。地址==项[i-1]。地址
现在是项[i]。deliveryAddress==项[i-1].deliveryAddress
?你能解释一下我的代码吗..我想了解你代码的每一步。我还需要先对数组进行排序吗?你的代码在这个数组中运行不正常::::var items=[{deliveryAddress:'Airport Rd'},{deliveryAddress:'Airport Rd'},{deliveryAddress:'Airport Rd'},{deliveryAddress:'Lahore'},{deliveryAddress:'Lahore'},{deliveryAddress:'Lahore'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'},{deliveryAddress:'Taxila'}]应该有3个TasialaYu只有2个。应该有3个吗?为什么?因为是这样的。如果总共有4个相同的地址……它应该返回2个地址而不是4个。如果有5个相同的地址,它应该返回3个总地址,因为我们从4个相同的地址得到2个,所以第五个是剩余的,我们必须考虑第五O。我也是