以这种格式;样本输入:[" book",1," table",4]样本输出:{string:[" 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.";
}
请问我究竟出错了什么?
答案 0 :(得分:2)
您可以直接使用该类型作为对象的键,同时迭代数组。
如果您没有带钥匙的物品,请生成一个带有空数组的新物品以推送实际物品。
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);
答案 1 :(得分:1)
您在循环中覆盖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;
}
答案 2 :(得分:1)
您可以将数组缩减为对象,并使用值的类型作为键
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));
&#13;
答案 3 :(得分:0)
感谢我自己有更好的解决方法
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.";
}
答案 4 :(得分:0)
我认为这应该适合你:
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
进入循环。 str
和num
数组,并重新声明var str[i] = []
或var num[i] = []
。 希望这会有所帮助。