使用JavaScript中的一个函数从数组和对象中获取密钥

使用JavaScript中的一个函数从数组和对象中获取密钥,javascript,arrays,object,key,Javascript,Arrays,Object,Key,我需要一个函数从对象中获取键,从数组中获取条目,如下所示: _key(["x", "y", "z"]); // ["x", "y", "z"]; _key({ a: "x", b: "y", c: "z" }); // ["a", "b", "c"]; 是否有一种内置的方法来执行此操作,如果没有,最短的方法是什么?您可以首先使用array.isArray()测试它是否为数组 function values(object) { return (object instanceof Array)

我需要一个函数从对象中获取键,从数组中获取条目,如下所示:

_key(["x", "y", "z"]); // ["x", "y", "z"];
_key({ a: "x", b: "y", c: "z" }); // ["a", "b", "c"];

是否有一种内置的方法来执行此操作,如果没有,最短的方法是什么?

您可以首先使用
array.isArray()测试它是否为数组

function values(object) {
  return (object instanceof Array) ? object : Object.keys(object);
}
功能_键(数据){
返回数组.isArray(数据)?数据:对象.键(数据);
}
console.log(_键([“x”、“y”、“z”]))

log(_key({a:x',b:y',c:z“}))
您可以首先使用
array.isArray()测试它是否为数组

功能_键(数据){
返回数组.isArray(数据)?数据:对象.键(数据);
}
console.log(_键([“x”、“y”、“z”]))

log(_key({a:“x”,b:“y”,c:“z”}))
您可以测试它是否是数组,并返回对象的值或键。我只使用ES6

功能_键(数据){
返回对象[['keys','values'][+Array.isArray(数据)](数据);
}
console.log(_键([“x”、“y”、“z”]))

log(_key({a:“x”,b:“y”,c:“z”}))
您可以测试它是否是数组,并返回对象的值或键。我只使用ES6

功能_键(数据){
返回对象[['keys','values'][+Array.isArray(数据)](数据);
}
console.log(_键([“x”、“y”、“z”]))

console.log(_key({a:x,b:y,c:z}))
谢谢大家的回答!以下是我所做的:

_key = function (_) {   
    let u = [].slice.call(_), v = Object.values(_).length;
    return u.length >= v ? toString.call(_) == "Array" ? _ : u : keys(_);
};
这适用于数组、伪数组(如参数)、对象和伪对象(如窗口)

它通过使用一些奇怪的行为来工作,这些行为可以通过以下代码段进行测试:

\u测试=功能(x,y){
console.log(y+“:”,[].slice.call(x).length+“-”+Object.values(x).length);
};
控制台日志(“输入:A-B”);
_测试([“x”],“数组”);
_测试({x::},“对象”);
_测试(document.queryselectoral(“div”),“伪数组”);
_测试(文件“伪对象”)

谢谢大家的回答,伙计们!以下是我所做的:

_key = function (_) {   
    let u = [].slice.call(_), v = Object.values(_).length;
    return u.length >= v ? toString.call(_) == "Array" ? _ : u : keys(_);
};
这适用于数组、伪数组(如参数)、对象和伪对象(如窗口)

它通过使用一些奇怪的行为来工作,这些行为可以通过以下代码段进行测试:

\u测试=功能(x,y){
console.log(y+“:”,[].slice.call(x).length+“-”+Object.values(x).length);
};
控制台日志(“输入:A-B”);
_测试([“x”],“数组”);
_测试({x::},“对象”);
_测试(document.queryselectoral(“div”),“伪数组”);
_测试(文件“伪对象”)

也许我应该更具体一些。也许我应该更具体一些。我正在基于此创建一个最终答案,谢谢!请注意,第一个代码段中的方法在传递对象时返回一个新数组,但在传递数组时返回对输入数组的引用。这并没有错,但在需求中详细说明可能是值得的。我正在基于此创建一个最终答案,谢谢!请注意,第一个代码段中的方法在传递对象时返回一个新数组,但在传递数组时返回对输入数组的引用。这并没有错,但在需求中指定可能是值得的。