1

给定我们创建的对象:

var t2 = 
[
 {"topicId":1,"subTopicId":1,"topicName":"a","subTopicName":"11"},
 {"topicId":2,"subTopicId":x,"topicName":"b","subTopicName":"xx"},
 {"topicId":3,"subTopicId":y,"topicName":"c","subTopicName":"yy"}
]

我们如何映射它以给出:

var t2 = 
    [
      {"id":1,"name":"a"},
      {"id":2,"name":"b"},
      {"id":3,"name":"c"},
    ]

我知道 _.lodash 有一个 map 函数和一个 reduce。我们可以使用其中任何一个来执行此操作吗?

请注意,在上一个问题中,我的队友得到了解决方案:

var dataMap = {
        topicId: 'id',
        topicName: 'name'

    };

var finalT = t.map(function (topic) {
    var t = {};
    for (var key in dataMap) {
        t[dataMap[key]] = topic[key];
    };
    return t;
});

有没有更简单的方法可以做到这一点?映射部分似乎没有那么简单。

4

2 回答 2

3

尝试这个:

var t2 = t2.map(function (e) {
  return {id: e.topicId, name:e.topicName};
});

请注意,map 的回调函数接受集合的每个元素(在本例中为数组的每个元素)并将其转换为您想要的形式。

JavaScript 数组已经有map函数了。参考这个网址:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

于 2014-01-29T05:28:26.890 回答
2

我知道 _.lodash 有一个 map 函数和一个 reduce。我们可以使用其中任何一个来执行此操作吗?

是的,因为reduce是最通用的迭代方法,map可以通过reduce. 不过,这里没有必要。

有没有更简单的方法可以做到这一点?映射部分似乎没有那么简单。

尝试了解它的作用。它创建一个新对象,并迭代dataMap以查看应将哪些属性复制到何处。

您可以离开该属性映射描述符循环并明确/详细地执行

var finalT = t.map(function (topic) {
    return {
        id: topic.topicId,
        name: topic.topicName
    };
});
// or, with your variable names and lodash:
t2 = _.map(t2, function (topic) {
    return {
        id: topic.topicId,
        name: topic.topicName
    };
});
于 2014-01-29T05:31:18.037 回答