将数组与对象进行比较

时间:2017-02-18 23:40:44

标签: javascript arrays json

我正在尝试构建一个简单的统计工具,它接收大量的CSV,将它们解析为JSON,进行一些跨数据操作并输出带有格式化统计信息的新CSV。 我是JS的新手,在尝试在对象和数组之间交叉数据时遇到了困难。

解析后,我收到一个像这样格式化的大对象(统计数据):

{
  'operator_1':
    conversions:
     [
       { 
         id: '3f002ab58',
         date: 13/03/2016
       },

       { 
         id: '4d002fb18',
         date: 14/03/2016
       }
      ]
    'opertor_2':
    conversions:
     [
       { 
         id: '1e03021149',
         date: 21/03/2016
       },

       { 
         id: '4bbc102fb18',
         date: 11/03/2016
       }
      ]
}

我有另一个数组(比如countries_array []),如下所示:

[
  {id : '4bbc102fb18', country : 'russia'},
  {id : '33f3897300a', country : 'australia'},
  {id : '4d002fb18', country : 'usa'}
]

我要做的是遍历countries_array [],在大对象(stats)中找到其'id'的所有匹配项,然后将country属性附加到右对应的运算符对象的转换数组中。所以在我做了attach_countries(stats,countries_array [])之后,我将收到相同的对象(或者一个新对象,在这种情况下无关紧要),如下所示:

{
  'operator_1':
    conversions:
     [
       { 
         id: '3f002ab58',
         date: 13/03/2016
       },

       { 
         id: '4d002fb18',
         date: 14/03/2016,
         country : 'usa' //usa was added
       }
      ]
    'opertor_2':
    conversions:
     [
       { 
         id: '1e03021149',
         date: 21/03/2016
       },

       { 
         id: '4bbc102fb18',
         date: 11/03/2016,
         country : 'russia' //russia was added
       }
      ]
}

2 个答案:

答案 0 :(得分:0)

您为对象提供的语法无效。假设运算符属性是具有volatile作为其属性的对象,则可以使用下面的ES6解决方案。它首先构建一个哈希值,以避免每次都必须遍历这些国家/地区,但可以通过id直接访问它们:

conversions

const hash = new Map(countries_array.map( item => [item.id, item.country] ));

Object.keys(stats).forEach(key => {
    stats[key].conversions.forEach(item => {
        if (hash.has(item.id)) item.country = hash.get(item.id);
    });
});
var stats = {
    operator_1: {
        conversions: [
           { 
             id: '3f002ab58',
             date: '13/03/2016'
           },

           { 
             id: '4d002fb18',
             date: '14/03/2016'
           }
        ],
    },
    operator_2: {
        conversions: [
           { 
             id: '1e03021149',
             date: '21/03/2016'
           },

           { 
             id: '4bbc102fb18',
             date: '11/03/2016'
           }
        ]
    }
};

countries_array = [
  {id : '4bbc102fb18', country : 'russia'},
  {id : '33f3897300a', country : 'australia'},
  {id : '4d002fb18', country : 'usa'}
];

const hash = new Map(countries_array.map( item => [item.id, item.country] ));

Object.keys(stats).forEach(key => {
    stats[key].conversions.forEach(item => {
        if (hash.has(item.id)) item.country = hash.get(item.id);
    });
});

console.log(stats);

答案 1 :(得分:0)

修复了有错误的JSON代码。忽略了您的“日期”格式。

    public interface TransactionRepository extends JpaRepository<Transaction, String>,
            QueryDslPredicateExecutor<Transaction> {

        @Lock(LockModeType.PESSIMISTIC_WRITE)
        Transaction findOne_withLock(Predicate p);

        default Transaction findOne(Predicate p) {
            if (EvironmentCheck) {
                return findOne_withLock(p);
            }
            return findOne(p);
        }
    }