Javascript 尝试在对象数组中循环以使用对象中的数据填充数组
我正在编写一个节点脚本来收集多个硬盘上的一组文件名和位置。问题是,我试图通过一个循环拨入对象的“dirs”数组,而不是必须为dirs[I].tv,dirs[I].movies,dirs[I].images等进行编码。对于数组中的每个对象,我将有一个循环通过的[“tv”,“movies”,“images”,etc“]数组。我最终得到了类似于“dirs[I].n”和“n”的东西作为一个由循环定义的变量,这是一个不起作用的问题。由于对象中未定义“n”,脚本将返回一个错误 下面是我正在使用的代码Javascript 尝试在对象数组中循环以使用对象中的数据填充数组,javascript,loops,object,Javascript,Loops,Object,我正在编写一个节点脚本来收集多个硬盘上的一组文件名和位置。问题是,我试图通过一个循环拨入对象的“dirs”数组,而不是必须为dirs[I].tv,dirs[I].movies,dirs[I].images等进行编码。对于数组中的每个对象,我将有一个循环通过的[“tv”,“movies”,“images”,etc“]数组。我最终得到了类似于“dirs[I].n”和“n”的东西作为一个由循环定义的变量,这是一个不起作用的问题。由于对象中未定义“n”,脚本将返回一个错误 下面是我正在使用的代码 var
var dirs = [
{
name: "C",
loc: "C:/",
tv: undefined,
movies: undefined,
images: "Users/'Master William'/Pictures/",
music: undefined,
torrents: undefined,
porn: undefined
},
{
name: "D",
loc: "D:/",
tv: "Video/TV/",
movies: "Video/Movies/",
images: "images/pics/",
music: "Music/",
torrents: "Torrents/",
porn: undefined
},
{
name: "I",
loc: "I:/",
tv: "Users/heliu/Videos/TV/",
movies: "Users/heliu/Videos/Movies/",
images: "Users/heliu/Desktop/Will/Pics/",
music: "Users/heliu/Music/",
torrents: undefined,
porn: "Users/heliu/Videos/Pr0n/"
},
{
name: "J",
loc: "J:/",
tv: "Video/TV/",
movies: "Video/Movies/",
images: "Pics",
music: "Tunes/",
torrents: undefined,
porn: "Pornography/"
}
]
const fs = require("fs");
var tvArr = [];
var moviesArr = [];
var imagesArr = [];
var musicArr = [];
var torrentsArr = [];
var pornArr = [];
var mediaArr = ["tv", "movies", "images", "music", "torrents", "porn"];
var arrArr = [tvArr, moviesArr, imagesArr, musicArr, torrentsArr, pornArr];
for( var i = 0; i < dirs.length; i++){
let o = dirs[i].loc;
for( var j = 0; j < mediaArr.length; j++){
let n = mediaArr[j];
if(dirs[i].n !== undefined){
let x = dirs[i].loc+dirs[i].n;
fs.readdirSync(x).forEach(file => {
arrArr[j].push(file);
})
}
}
}
var-dirs=[
{
名称:“C”,
loc:“C:/”,
电视:未定义,
电影:未定义,
图片:“用户/‘威廉大师’/图片/”,
音乐:未定义,
激流:未定义,
色情:未定义
},
{
名称:“D”,
loc:“D:/”,
电视:“视频/电视/”,
电影:“视频/电影/”,
图像:“图像/图片/”,
音乐:“音乐/”,
激流:“激流/”,
色情:未定义
},
{
姓名:“我”,
loc:“I:/”,
电视:“用户/heliu/Videos/tv/”,
电影:“用户/heliu/Videos/movies/”,
图片:“Users/heliu/Desktop/Will/Pics/”,
音乐:“Users/heliu/music/”,
激流:未定义,
色情:“用户/heliu/Videos/Pr0n/”
},
{
姓名:“J”,
loc:“J:/”,
电视:“视频/电视/”,
电影:“视频/电影/”,
图片:“图片”,
音乐:“曲调/”,
激流:未定义,
色情:“色情/”
}
]
常数fs=要求(“fs”);
var-tvArr=[];
var moviesArr=[];
var成像仪=[];
var musicArr=[];
var torrentsArr=[];
var-arr=[];
var mediaArr=[“电视”、“电影”、“图像”、“音乐”、“洪流”、“色情”];
var arrArr=[tvArr、moviesArr、imagesArr、musicArr、torrentsArr、PONNARR];
对于(变量i=0;i{
arrArr[j].推送(文件);
})
}
}
}
我将媒体阵列更改为
var mediaArr=[dirs[i].电视,dirs[i].电影,dirs[i].图像等]
并在循环中确定其范围,以便识别“i”问题到底是什么?试图找到更好的方法吗?
n
是一个字符串,对吗?然后尝试使用dirs[i].n来访问该属性?我想你需要做dirs[I][n]
。