使用underscore.js减少数组元素

时间:2016-01-11 17:08:52

标签: javascript underscore.js javascript-objects

我得到一个包含许多参数的数据数组。例如,数据数组采用以下格式:

MATCH (d:Destination)-[:Hosts]-(a:Accomodation)
WHERE d.name = 'some name'
RETURN DISTINCT labels(a), collect(a.name)

我希望将上面的数组简化为以下格式:

var data  = [
             {
               "name":"pradeep", 
               "age": "32", 
               "location": "Bangalore"
             }, 
             {
               "name":"praveen", 
               "age": "30", 
               "location": "Mangalore"
             }, 
             {
               "name":"Ajay", 
               "age": "32", 
               "location": "Hubli"
             }
           ]

如何使用Underscore完成此操作。我尝试使用_.pluck但它只获取数据而不是键。

6 个答案:

答案 0 :(得分:1)

你可以使用纯JavaScript来实现它,一种方法是:

data.map(function(obj) { 
    return {'name': obj.name};
})

如果您想参数化应保留的键,您可以编写如下函数:

function filterByKey(arr, key) {
    return arr.map(function(obj) {
        var newObj = {};
        newObj[key] = obj[key];
        return newObj;
    });
}

并使用它:

var newData = filterByKey(data, 'name');

干杯

答案 1 :(得分:0)

对于严格的下划线JS方法,您可以将_.map_.pick结合使用:

var newData = _.map(data, function(d) { return _.pick(d, 'name' })

然而,使用_.pick效率不如仅仅在{ name: d.name }回调中返回_.map那么高效。

答案 2 :(得分:0)

Underscore不是真的需要,你可以这样做..

var newData = data.map(function (x) {
    return { name: x.name };
});

但如果你真的想使用下划线,那就是这样:

var newData = _.map(data, function (x) {
    return { name: x.name };
});

答案 3 :(得分:0)

在原生JavaScript中,您可以这样做:

var data = [{
  "name": "pradeep",
  "age": "32",
  "location": "Bangalore"
}, {
  "name": "praveen",
  "age": "30",
  "location": "Mangalore"
}, {
  "name": "Ajay",
  "age": "32",
  "location": "Hubli"
}];

var newData = data.map(function(d) {
  return { name: d.name }
});

console.log(newData)

答案 4 :(得分:0)

您需要使用Undescore中的map功能。它是函数式编程中非常流行的实用程序,您也可以在浏览器中原生使用它。

使用Underscore.js,代码如下所示:

_.map(data, function(element) {
  return {name: element['name']};
})

答案 5 :(得分:0)

您可以使用原生JavaScript

来完成
var result = [];
data.forEach(function(d){
 result.push({'name': d.name}) // d is an iterator
})

您可以使用map函数返回键值对

var result = data.map(function(d){
 return {'name': d.name}
})