【问题标题】:what is the best way to fetch property list from json array [duplicate]从json数组中获取属性列表的最佳方法是什么[重复]
【发布时间】:2015-04-16 03:01:57
【问题描述】:

我想从一个 json 数组中获取一个属性列表。 下面是json数组

[ { 树名:'tree_A', 前缀:'前缀' }, { 树名:'tree_b', 前缀:'prefix1/' } ]

运行代码后,我期望的结果是["tree_A","tree_B"];

下面是我的实现:

var treeNames = [];
        for (var index = 0; index < config.treeSources.length; index++) {
            treeNames.push(config.treeSources[index].treeName);
        }

我想找到一个让代码更漂亮的最佳实现..

有人想玩吗?

【问题讨论】:

  • lodash 版本:_.forEach(config.treeSources, function (source) { treeNames1.push(source.treeName); });
  • javascript中有没有像C# lambda var result = list.select(x=&gt;x.treeNmae).list();这样的函数?
  • “我想找到一个让代码更漂亮的最佳实现” 你如何定义“最佳”?“最佳”实现是不是最短的?内存最少?CPU 最少?与现有运行时最兼容的那个?
  • 其实我想“让代码更漂亮”。它看起来很短并且很好理解,但是您的问题对我很有用(javascript中的新手)。让我眼前一亮。

标签: javascript arrays json foreach lodash


【解决方案1】:

查看Lodash/Underscore_.pluck 函数。它完全符合您的要求:

var treeNames = _.pluck(config.treeSources, 'treeName')

如果你只打算将它用于这一个功能,那么使用像 Lodash 或 Underscore 这样的整个实用程序库可能有点过头了,尽管它们确实提供了各种各样非常有用的其他功能。

【讨论】:

  • 请,如果此答案解决了您的问题,请单击问题旁边的绿色勾号将其设置为已接受的答案;)
  • 如果您只需要采摘,则可以避免使用 lodash:function pluck(x){ "use strict"; return x[this];},然后随时使用 [].map()(或过滤器):config.treeSources.map(pluck, 'treeName');
【解决方案2】:

我将使用本机 map 进行如下操作

var data = [ { treeName: 'tree_A', prefix: 'prefix' }, { treeName: 'tree_b', prefix: 'prefix1/' } ];
var treeNames = data.map(function (tree) {
    return tree.treeName;
});

console.log(treeNames);

注意:- IE8 不支持 ma​​p 功能,因此如果要在 IE8 上使用此功能,您必须使用原生 for 循环或underscorejs 之类的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 2018-03-24
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多