繁体   English   中英

提取对象数组的String属性

[英]Extract String property of an array of objects

我在数组中有几个对象,如下所示:

var objectArray = [
   abc: {id: "qq09qed0000", status: "running"}, 
   def: {id: "qq09qed0001", status: "paused"}, 
   ...
   xyz: {id: "qq09qed9999", status: "paused"}
];

编辑:我不确定,它如何在内存中表示,objectArray是通过执行array.push(object);创建的。 循环数百次。 上面只是一个示例,向您展示了对象的外观,对象被截断了,实际上还有更多的字段。 请停止告诉我该数组的格式错误,据我所知,这只是一个示例。 要考虑的主要问题是如何从对象 数组到字符串数组

Edit2:也许在内存中看起来像这样:

var objectArray = [
       {id: "qq09qed0000", status: "running"}, 
       {id: "qq09qed0001", status: "paused"}, 
       ...
       {id: "qq09qed9999", status: "paused"}
    ];

如果我只想要所有这些元素的ID的有序数组(它们是非顺序的),那么提取它们的最佳方法是什么?

我尝试了foreach循环,

for(var obj in objectArray ) {
    dataArray.push(objectArray[obj].getid());
}

但是我被告知这不保证顺序不变。

function sortById (a,b) 
  {
  if (a.id < b.id) return -1
  if (a.id > b.id) return 1;
  return 0;
  }

objectArray.sort (sortById);

您的objectArray是一个对象,而不是数组,因此没有明显的/定义的顺序。

元素的顺序取决于运行它的浏览器的JavaScipt实现。

因此,无法“保持订购完好无损”。 ,因为首先没有设置顺序。

既然您已经编辑了问题,那么objectArray不是有效的JavaScript语法。

数组不能有如下的key:value对:

var objectArray = [
    abc: {id: "qq09qed0000", status: "running"}, 

从我从您的问题中收集的信息来看,这应该有效:

data = data2.map(function(e){return e.id;});

这应该返回一个只有id值的数组,其顺序与data2中的顺序相同。

如果先将所有id推入数组中,然后再对它们进行排序,则'for'函数不能保持排序的事实无关紧要

将所有ID推入新数组

var objectArray = {
    abc: {id: "qq09qed0000", status: "running"}, 
    def: {id: "qq09qed0001", status: "paused"}, 
    ...
    xyz: {id: "qq09qed9999", status: "paused"}
};

var idArray = [];
for(var item in objectArray){

    idArray.push(item.id);
};

这将产生一个看起来像这样的数组:

idsArray = ["qq09qed0000","qq09qed0001", ..., "qq09qed9999"]

接下来,使用数组排序方法对数组进行排序

idsArray.sort();

要么

idsArray.sort(function(a,b){
    return a - b;
});

默认情况下,这将按字母数字顺序对其进行排序。 您还可以使用以下顺序撤销订单:

idsArray.sort(function(a,b){
    return b - a;
});
Namespace.pluck = function(obj, prop)
{
    var isFunction = Namespace.isFunction(prop);
    return Namespace.map(obj, function(key, element)
    {
        return isFunction ? prop(element) : element[prop];
    });
};

var ids = Namespace.pluck(objectArray, 'id').sort();

Array.prototype.sort()将给您按字典顺序排序,而不是自然排序。 10将在1之后但在2之前

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM