javascript - 对 JavaScript 数组对象中的项目进行分组

标签 javascript arrays

我有一个 JavaScript 数组对象:

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

到目前为止我尝试过的是:

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);    
    }
  }

但是上面的代码没有正确对项目进行分组..我得到这个输出:

abc,abc,wer,xyz,xyz

注意:我首先按升序对数组进行排序

最佳答案

您可以使用计数器和 Array#filter 来过滤它.

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

此提案使用 thisArg,一个真正的空对象作为回调内部的 this 对象。

基本上,this[a.address] 是计数器,如果不存在,则初始化为零,然后加一。

计数完毕后,用计数器返回。如果值为奇数,则该项目包含在结果集中。

虽然this在所有回调中都是持久的,但不需要排序,因为计数器不需要特定的顺序。

var items = [{ address: 'abc' }, { address: 'abc' }, { address: 'abc' }, { address: 'abc' }, { address: 'wer' }, { address: 'xyz' }, { address: 'xyz' }, { address: 'xyz' }],
    result = items.filter(function (a) {
        this[a.address] = (this[a.address] || 0) + 1;
        return this[a.address] % 2;
    }, Object.create(null));

console.log(result);

关于javascript - 对 JavaScript 数组对象中的项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079037/

相关文章:

javascript - 正则表达式支持非顺序文本

arrays - 将 C 字符串数组转换为 Swift 字符串数组

java - 尝试按字母顺序对对象数组进行排序,但对象无法转换为字符串

javascript - 如何分配多维数组中的单个元素 (JavaScript)

javascript - 单击另一个菜单时,AdminLTE 3 展开菜单不会关闭/折叠

javascript - 在 keyup 期间从 javascript 中的不同函数添加变量

javascript - 在 Android 上从 JavaScript 访问 UI

javascript - 将所有值从对象推送到数组?

java - 不了解中位数算法的中位数来查找第 k 个元素

java - 创建泛型类类型的数组