繁体   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