![](/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.