【问题标题】:Get array of property values from array of objects with jquery [duplicate]使用jquery从对象数组中获取属性值数组[重复]
【发布时间】:2015-06-10 22:22:28
【问题描述】:

我想从这里出发:

example = [{
  name: "someone1",
  city: "somewhere1",
  state: "someplace1"
},{
  name: "someone2",
  city: "somewhere2",
  state: "someplace2"
}]

到这里:

example.name = [ "someone1", "someone2" ]

尽可能少的代码。显然,我可以循环它并构建数组,但我需要在各种对象上多次执行此操作。我可以编写一个函数来完成它,但很难使该函数对我的应用程序足够通用。

在 jQuery 中有这样的快捷方式吗?

【问题讨论】:

  • 你必须使用 jquery 循环。我希望这对你有帮助,亲爱的。 stackoverflow.com/questions/2342371/…
  • 原生 javascript 总是比 jQuery 快。
  • 再解释一下..你有一个对象,那是一组相同的对象,然后..?
  • @DeftSoftInformatics 不,不必必须

标签: javascript jquery arrays


【解决方案1】:

您可以遍历对象键并使用pushname 保存在数组中:

example = [{
  name: "someone1",
  city: "somewhere1",
  state: "someplace1"
}, {
  name: "someone2",
  city: "somewhere2",
  state: "someplace2"
}];
var arrNames = [];
//iterate through object keys
Object.keys(example).forEach(function(key) {
  //get the value of name
  var val = example[key]["name"];
  //push the name string in the array
  arrNames.push(val);
});
console.log(arrNames);//prints ["someone1", "someone2"]

在@Felix 建议(我同意)之后,无需使用Object.keys

example = [{
  name: "someone1",
  city: "somewhere1",
  state: "someplace1"
}, {
  name: "someone2",
  city: "somewhere2",
  state: "someplace2"
}];
var arrNames = [];
//iterate through object keys
example.forEach(function(item) {
  //get the value of name
  var val = item.name
  //push the name string in the array
  arrNames.push(val);
});
console.log(arrNames); //prints ["someone1", "someone2"]

参考文献

Object.keys()

Array.prototype.forEach()

Array.prototype.push()

【讨论】:

  • 刚刚做了一个通用函数,它采用对象名称和键名,它完美地工作。很好的答案,谢谢!
  • Object.keys(example).forEach(function(key) { 是一种非常奇怪的遍历数组的方式。为什么不简单地example.forEach(function(item) { ... })
  • 感谢@FelixKling 的反馈。你说的对。我稍后会更新我的答案。
  • 如何得到这个来创建像["someone1", "somewhere1","someplace1"],[...]这样的值数组?
【解决方案2】:

您可以使用 jQuery 中的$.map 函数:

var value = $.map(example, function () {
    return this.name;
});

这将返回一个项目数组。

【讨论】:

  • 这个答案有效,但下面的答案被接受了,因为它可以同时完成我需要的所有属性名称。 +1
【解决方案3】:

这里是使用jinqJs的方法

代码行是:

jinqJs().from(example).select(function(row){return row.name;});

var example = [{
  name: "someone1",
  city: "somewhere1",
  state: "someplace1"
},{
  name: "someone2",
  city: "somewhere2",
  state: "someplace2"
}];

var result = jinqJs().from(example).select(function(row){return row.name;});

document.body.innerHTML = '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
&lt;script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案4】:

    这是我能想到的最简单的解决方案:

    function doThat (myArray) {
      newObject = {};
      myArray.forEach(function (obj, idx) {
        var keys = Object.keys(obj);
        keys.forEach(function (key) {
          if (!obj[key]) {
            newObject[key] = [];
          }
          newObject[key][idx] = obj[key]; 
        });
      });
      return newObject;
    }
    

    【讨论】:

    • 我认为我的解决方案更通用,因为即使数组中的一个对象错过了一个属性,它也会保持所有索引不变
    【解决方案5】:

    我在这里为你做了一个快速测试:http://jsperf.com/jquery-vs-javascriptlvjsklvjsfklsfklsdjfk

    它由三个解决方案组成:

    一个基本的for循环

    for (var i = 0; i < example.length; i++) {
        array.push(example[i].name);
    }
    

    一个 jQuery $.each()

    $.each(example, function(i, item) {
        array.push(example[i].name);
    });
    

    还有一个答案发布到这个帖子

    Object.keys(example).forEach(function(key) {
      //get the value of name
      var val = example[key]["name"];
      //push the name string in the array
      array.push(val);
    });
    

    这是结果(条越大越好)

    基本上你必须记住的是,jQuery 可能有一个包含“更少代码”的快捷方式,但实际上它的性能会比你自己编写代码更差。

    【讨论】:

    • 虽然 forEach 是最慢的,但我并不担心速度,它允许我通过一个循环(通过没有返回语句)对我需要的所有属性执行此操作。谢谢您的意见;我选择使用 forEach,因为它是为我的应用程序编写速度最快的。
    • 这是问题的最佳答案!您可以通过在乞求时检查一次长度并将其存储为本地变量来更好地改进循环,而不是检查每个循环周期。即 for (var i = 0, x = example.length; i
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 2012-12-07
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多