![](/img/trans.png)
[英]How can I structure a .find() function that takes an array of values and returns an Object of key : values
[英]How do I write a function that takes an array of values and returns an object
以这种格式; 示例输入:[“ book”,1,“ table”,4]示例输出:{字符串:[“ book”,“ table”],数字:[1,4]}
这是我编写的代码,但没有给我想要的输出。
function listDic(arr) {
if (Array.isArray(arr)) {
let output = {};
for (let i =0; i == arr.length; i++) {
if (typeof arr[i] === 'string') {
var str = [];
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
var num = [];
num.push(arr[i]);
}
}
return {string: str, number: num}
}
return "Only arrays are allowed.";
}
请问我到底是怎么了?
您可以在迭代数组时直接将类型用作对象的键。
如果您没有带键的对象,请生成一个新的带有空数组的对象,以推送实际项目。
var array = ["book", 1, "table", 4], object = {}; array.forEach(function (a) { var type = typeof a; object[type] = object[type] || []; object[type].push(a); }); console.log(object);
您将在循环中覆盖str
和num
,而从未保留对数组的任何其他引用。 将这些数组放入输出对象,然后推入其中。
var data = ["book", 1, "table", 4]; console.log(listDic(data)); function listDic(arr) { if (!Array.isArray(arr)) { return "Only arrays are allowed."; } let output = { string: [], number: [] }; for (let i = 0; i < arr.length; i++) { switch (typeof arr[i]) { case "string": output.string.push(arr[i]); break; case 'number': output.number.push(arr[i]); } } return output; }
您可以将数组简化为一个对象,然后将值的类型用作键
var arr = ["book", 1, "table", 4]; function listDic(arr) { return arr.reduce((a, b) => { let t = typeof b; a[t] ? a[t].push(b) : a[t] = [b]; return a; }, {}); } console.log(listDic(arr));
谢谢,我有更好的方法自己解决
function listDic(arr) {
if (Array.isArray(arr)) {
let str = [];
let num = [];
for (let i =0; i < arr.length; i++) {
if (typeof arr[i] === 'string') {
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
num.push(arr[i]);
}
}
return {string: str, number: num}
}
return "Only arrays are allowed.";
}
我认为这应该为您工作:
function listDic(arr) {
if (Array.isArray(arr)) {
let output = {};
var str = [],
num = []; //CORRECTED
for (let i = 0; i < arr.length; i++) { //CORRECTED
if (typeof arr[i] === 'string') {
str.push(arr[i]);
}
if (typeof arr[i] === 'number') {
num.push(arr[i]);
}
}
return { string: str, number: num }
}
return "Only arrays are allowed.";
}
console.log(listDic(["book", 1, "table", 4]));
说明
基本上有两个问题:
== arr.length
进入循环。 var str[i] = []
或var num[i] = []
重新分配str
和num
数组。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.