Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按顺序保证索引对象到数组_Javascript_Arrays_Sorting_Object - Fatal编程技术网

Javascript 按顺序保证索引对象到数组

Javascript 按顺序保证索引对象到数组,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,扩展 因此,我在玩一个项目,我发现自己需要创建一个字符串,我不知道字母的确切顺序,但我知道它们的位置,并由此延伸,这个字符串的长度 这样做的部分原因是我不想在进程中的任何时候跳过数组元素。这意味着插入顺序很重要 让字符串长度=10; 设o={ 0:a, 4:q, 7:t, 3:p, 6:h, 1:z, 2:t, 5:a, 9:b, 8:z }; 函数obj_to_arro{ //返回[a,z,t,p,q,a,h,t,z,b] } 到目前为止,我找到的所有答案都不一定能保证给定一个索引对象,它会给

扩展

因此,我在玩一个项目,我发现自己需要创建一个字符串,我不知道字母的确切顺序,但我知道它们的位置,并由此延伸,这个字符串的长度

这样做的部分原因是我不想在进程中的任何时候跳过数组元素。这意味着插入顺序很重要

让字符串长度=10; 设o={ 0:a, 4:q, 7:t, 3:p, 6:h, 1:z, 2:t, 5:a, 9:b, 8:z }; 函数obj_to_arro{ //返回[a,z,t,p,q,a,h,t,z,b] } 到目前为止,我找到的所有答案都不一定能保证给定一个索引对象,它会给出相应的有序对象,这主要是因为对象的性质是无序的

有没有一种方法可以实现这一点?

使用,您可以检索一个键数组,以数字表示,然后将该数组排序为一个带值的数组

结果将是一个值数组,其顺序与键的数值相对应,即使它们不是连续的

比如说

设o={0:a,1:z,2:t,3:p,4:q,5:a,6:h,7:t,8:z,10:b} 让sortedValues=Object.keyso .sorta,b=>a-b//数值比较 .mapk=>o[k]//映射到值
infosortedValues您可以用两种可能的方法解决这个问题,甚至可能更多

排列

要么将同时包含键和值的对象添加到数组中

array.push{c:a}或array.push{key:c,value:a},然后添加下一个,依此类推

Push将元素放在数组的末尾

排序对象

或者使用字母键插入对象,在这种情况下,可以使用下面的示例

您可以对对象的键属性进行排序,并使用它们访问每个值,然后将它们放入另一个数组中。下面是一个详细的示例,说明如何做到这一点

常量someObject={ c:a, 4:q, 7:t, b:p, 6:h, 1:z, 2:t, 5:a, a:b, 8:z }; 函数obj_至arrobj{ 让结果=[] //以数组形式从对象获取关键帧 让keys=Object.keysobj console.log'keys:',keys //按字母顺序对数组排序 设sorted=keys.sort console.log'sorted:',sorted //将每个值添加到结果数组中 sorted.forEachfunctionkey{ console.log'adding'+obj[key]+'to array' 结果.pushobj[键] } console.log'result:',result 返回结果 } //调用函数
obj_to_arrsomeObject简而言之,由于Javascript规范,您不能这样做

Javascript中的对象不保证以任何方式对其键进行排序,因为它是一种基本类型,允许引擎对其进行优化,包括对键进行重新排序以加快属性访问

如果排序真的很重要,那么就不应该使用对象原语。一个元组数组,它保证了排序:

let fixedList = [
  { key: 0, value: 'a' },
  { key: 4, vlaue: 'q' },
  ...
];
或者,您也可以使用,它专门作为拥有对象的一种方式存在,其键/值对的顺序与您声明的相同


在这两者中,对于数据传输,您可能需要前者,对于运行代码,您通常需要后者。

堆栈溢出通常更喜欢问题而不是语句-为了回应这一点。。。实际的问题是什么?你是指内置的和函数吗?如果插入顺序很重要,那么你在这里使用的数据结构绝对是错误的。仅当您不关心键值顺序时才使用对象,因为规范实际上并不保证存在顺序。这完全由JIT决定。一旦让o存储在内存中,这些键就没有义务反映您写下的顺序,事实上,它们很可能以排序的方式存储,因此对象上的属性查找可以使用有效的解析算法。元组是任何应该放在一起的事物集合的通用名称,所以在本例中,您需要类似于let properlist=[{key:0,value:a,{key:4,value:q},]现在您可以依赖这样一个事实:当您迭代时,键和值的顺序总是相同的。但是,Object.keys不能保证当对象通过JIT提交到内存时,键不会被重新排序。在这种情况下,排序不会恢复原始顺序。@Mike'Pomax'Kamermans我认为OP需要ed将键按数字顺序排列。这就是我对它们进行排序的原因。在所需的输出中,这一点对我来说似乎很清楚,就像已经建议Object的其他答案一样。键,该函数不能保证键按声明的相同顺序排列。因为你没有阅读帖子:它们想要声明的顺序,而不是字母数字顺序ted。键和值都不遵循标准顺序。注意,我编辑了我的答案以实际回答问题
N感谢您的评论。请注意,默认的字典排序Array.prototype.sort将意味着键10位于键2之前非常正确。在这种情况下,您可以使用自定义。原始顺序无关紧要。这就是重点。o将以我不知道的顺序生成,当长度达到10或string_长度时,我运行将对它们进行排序的函数。创建新数组时,插入顺序很重要。它将如何对它们进行排序?不是使用什么代码,而是在将东西插入到固定排序数组之前,需要进行什么排序?这就是为什么我问它是否可以实现的原因,从我得到的信息来看,如果可以实现什么,它似乎不可能实现?因为您的帖子询问了对象中指定的顺序,所以如果您想要这种顺序,那么这个答案是唯一的答案:它无法完成,因为没有对象键的顺序。Javascripts中的对象文本没有顺序键,因此没有要查找的顺序:没有。当然,如果这不是你要问的,那么请编辑你的问题,我可以相应地编辑我的回答。我很抱歉造成混淆,但我很确定这个问题要问的是,我想说的是:给定一个无序的索引对象,如果可能的话,如何在不跳过值的情况下将其放入和数组中