忽略非标准数组键

Ale*_*lls 4 javascript json node.js

说我们有这个:

const v = [1,2,3];
v.foo = 5;

console.log(JSON.stringify(v));
Run Code Online (Sandbox Code Playgroud)

我们将得到:

'[1,2,3]'
Run Code Online (Sandbox Code Playgroud)

并且将忽略数组上的'foo'属性.但是,如果我们这样做:

console.log(Object.keys(v));
Run Code Online (Sandbox Code Playgroud)

我们将得到:

[ '0', '1', '2', 'foo' ]
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 我们如何只从数组中获取标准键,并忽略任何添加到数组中的属性?

我知道如何做到这一点的唯一方法是:

const keys = Object.keys(v).filter(k => Number.isInteger(parseInt(k)));
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Ber*_*rgi 5

您可以使用

Array.from(v.keys())
Run Code Online (Sandbox Code Playgroud)

where keys返回整数索引上的迭代器(不是属性名!).请注意,Object.keys与之相反,它忽略了数组的稀疏性,即使对于空洞也会产生索引.

我想知道为什么你甚至不得不Object.keys在阵列上使用.数组只有索引,你可以用一个简单的for (let i=0; i<v.length; i++)循环生成它们.或者甚至用类似的东西 Array.from({length: v.length}, (_, i) => i).