Javascript 忽略非标准数组键

Javascript 忽略非标准数组键,javascript,node.js,json,Javascript,Node.js,Json,假设我们有: const v = [1,2,3]; v.foo = 5; console.log(JSON.stringify(v)); 我们将获得: '[1,2,3]' [ '0', '1', '2', 'foo' ] 数组上的'foo'属性将被忽略。 然而,如果我们这样做: console.log(Object.keys(v)); 我们将获得: '[1,2,3]' [ '0', '1', '2', 'foo' ] 我的问题是-我们如何只从数组中获取标准键,而忽略附加到数组上的任

假设我们有:

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

console.log(JSON.stringify(v));
我们将获得:

'[1,2,3]'
[ '0', '1', '2', 'foo' ]
数组上的'foo'属性将被忽略。 然而,如果我们这样做:

console.log(Object.keys(v));
我们将获得:

'[1,2,3]'
[ '0', '1', '2', 'foo' ]
我的问题是-我们如何只从数组中获取标准键,而忽略附加到数组上的任何属性

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

const keys = Object.keys(v).filter(k => Number.isInteger(parseInt(k)));

有更好的方法吗?

您可以使用
Array.from

const v=[1,2,3];
v、 foo=5;
常量键=数组。从(v);
控制台日志(键)您可以使用

Array.from(v.keys())
其中返回整数索引的迭代器(不是属性名!)。请注意,与
Object.keys
相反,它忽略了数组的稀疏性,甚至为孔生成索引


我想知道为什么你甚至必须在数组上使用
Object.keys
。数组只有索引,您可以使用一个简单的
for(让i=0;i i)
生成它们。建议不要弄乱数组键。V8基于数组键进行性能评估,并做了一些非常好的假设,如果修改这些假设,将失去所有好处

但是,如果您不关心性能,那么您可以创建阵列的副本,并且引擎不会复制自定义密钥


Object.keys([…v])

为什么要将键添加到数组中?你怎么会遇到这样的情况,你需要修复它?@Kresimir这是一个库,我无法控制其他人做什么。那是一个有点奇怪的库。我想我可能在寻找
Array.prototype.keys()
@kinduser库需要字符串化一个对象,但处理循环引用。stringify将在循环引用时抛出错误。我正在查找数组的键,而不是值。我想我正在寻找
Array.prototype.keys()
=>是的,这是正确的,我正在使用
for(让k个键)
所以只要
v.keys()
就好了。