2014-04-29 119 views
0

我有一个数组,看起来像这样几个对象:提取字符串属性

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

编辑:我不知道,它是如何在内存中表示,该objectArray被做创建的Array.push(对象);循环数百次。以上只是一个例子,向您展示对象的样子,它们被截断,实际上有更多的领域。请停止告诉我阵列格式错误,我知道这只是一个例子。主要考虑的是如何从对象数组字符串数组

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()); 
} 

但有人告诉我这是不是guarranteed保持完整有序。

+0

如果您实际上有一个数组,那么您的代码在编辑之后,那么排序将保持不变。谁告诉你它不会? – Guffa

+0

what * exactly *是'objectArray'?目前问题中的代码是语法错误。这不是有效的代码。 –

+0

你想保持objectArray的顺序吗? –

回答

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

objectArray.sort (sortById); 
+1

对象没有'.sort'功能。 – Cerbrus

+0

'objectArray'不是根据其片段的数组(尽管名称具有误导性) – Metalstorm

+0

似乎OP在问题中犯了一个错字。 -1删除。 – Cerbrus

0

objectArray是一个对象,而不是一个数组,正因为如此,有没有明显的/定义排序。

什么顺序的元素是,依赖于javascipt的实现它在运行浏览器的。

出于这个原因,没有办法“保持排序不变。”,因为首先没有设置排序。

现在,您已经编辑了该问题,objectArray不是有效的JavaScript语法。

数组不能有键:像这样的值对:

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

从我从你的问题云集,这应该工作:

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

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

+0

道歉,我用{}而不是[]。这绝对是我的代码中的一个数组。 – Husman

+3

[](array)不能像你在你的例子中那样有键。 – Metalstorm

+0

我发布的代码只是对象创建的表示,在代码中的一个位置,我们执行array.push()并将数百个对象注入到数组中。不要从字面上看这个例子,我DEFIFITELY有一个对象数组。从这些对象中提取字符串并保持正确顺序的最好方法是什么? – Husman

-1
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

+0

'TypeError:undefined不是函数'。 – Cerbrus

+0

你必须实现'isFunction'和'map',它们是标准的实现。 – Metalstorm

+0

不要假设人们知道这一点。始终在答案中包含必要的代码。 – Cerbrus

0

如果先推阵列中的所有的ID前,然后将它们整理之后,一个事实,即“为”功能不守排序并不重要

推在一个新的数组的所有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"] 

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

0对数组进行排序
idsArray.sort(); 

OR

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

默认将按照字母顺序进行排序。您也可以使用以下命令反向执行命令:

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

此问题未使用jQuery标记。 – Cerbrus

+0

-1这个简单的东西并不需要jQuery。这也不会对ID进行排序。 – Metalstorm

+0

我已经删除了jQuery引用并添加了排序。 –