繁体   English   中英

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

[英]Get keys from both arrays and objects using one function in JavaScript

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

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

有内置的方法可以做到吗?如果没有,最短的方法是什么?

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

 function _key(data) { return Array.isArray(data) ? data : Object.keys(data); } console.log(_key(["x", "y", "z"])) console.log(_key({ a: "x", b: "y", c: "z" })) 

例如,如果您需要传递多个参数,对象和数组,则可以使用rest参数语法和map()返回一个数组。

 function _key(...data) { return [].concat(...data.map(e => Array.isArray(e) ? e : Object.keys(e))) } console.log(_key(["x", "y", "z"], { a: "x", b: "y", c: "z" }, {z: 1})) 

function values(object) {
  return (object instanceof Array) ? object : Object.keys(object);
}

您可以测试它是否为数组,然后返回对象的值或键。 我仅使用ES6。

 function _key(data) { return Object[['keys', 'values'][+Array.isArray(data)]](data); } console.log(_key(["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(_);
};

这适用于数组,伪数组(例如参数),对象和伪对象(例如窗口)

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

 _test = function (x, y) { console.log(y + ":", [].slice.call(x).length + "-" + Object.values(x).length); }; console.log("Input: AB"); _test(["x"], "Array"); _test({ x: "" }, "Object"); _test(document.querySelectorAll("div"), "Pseudo-Array"); _test(document, "Pseudo-Object"); 
 <div></div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM