簡體   English   中英

如何編寫一個接受值數組並返回對象的函數

[英]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); 

您將在循環中覆蓋strnum ,而從未保留對數組的任何其他引用。 將這些數組放入輸出對象,然后推入其中。

 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]));

說明

基本上有兩個問題:

  • 您確實沒有在for循環的進入條件上以== arr.length進入循環。
  • 您一直使用重新聲明var str[i] = []var num[i] = []重新分配strnum數組。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM