Javascript Object.keys,但不按顺序JS/TS
Javascript Object.keys,但不按顺序JS/TS,javascript,json,angular,typescript,Javascript,Json,Angular,Typescript,我有一个问题:我有这个JSON=> const json = { "test" : "...", "3" : "...", "go" : "...", "38" : "..." } 当我这样做的时候: const returned = Object.keys(json); 把这个放在里面: 3,38,go,test
我有一个问题:我有这个JSON=>
const json = {
"test" : "...",
"3" : "...",
"go" : "...",
"38" : "..."
}
当我这样做的时候:
const returned = Object.keys(json);
把这个放在里面:
3,38,go,test
按字母顺序!我只想按“经典”顺序退货。您有解决方案吗?您可以使用对象按插入顺序迭代键。正如MDN文档所说 Map对象保存键值对并记住键的原始插入顺序。任何值(对象和基元值)都可以用作键或值。。。。
for…of
循环为每次迭代返回一个[key,value]数组
如果您可以容忍json中的整数键上有前导零,那么您可以让它像这样工作:
const json={
“测试”:“…”,
"03" : "...",
“开始”:“…”,
"038" : "..."
}
至少在Chrome中的console.log(Object.keys(json))//[“test”、“03”、“go”、“038”]如果插入顺序重要,请使用映射
如果插入顺序与使用有关,则贴图将根据规范保留插入顺序
演示
let map=new map();
set('test','…');
map.set('3','…');
map.set('go','…');
map.set('38','…');
for(map.keys()的键)
console.log(key)
您可以使用一些技巧,将+
添加到如下所示的对象数字键,然后再次将其转换为数字:
const json = {
test: "...",
"+3": "...",
go: "...",
"+38": "...",
};
for (let key in json) {
let value = json[key];
if (key[0] === "+") {
key = +key;
}
console.log(key + ": " + value);
}
这是不可能的。看起来有关密钥顺序的信息没有存储在任何可能有用的地方。在Chrome中,Reflect.ownKeys(json)给了我[“3”、“38”、“test”、“go”],这与Object.keys
是一样的。是的:我的意思是,顺序显然是固定的,但整数排在第一位,然后是按时间顺序排列的字符串。因此,问题显然只存在于类似整数的字符串中。此外,“测试”和“开始”是OP的“开始”和“测试”的另一种方式。根据具体情况,这个问题可能解决了一半。