繁体   English   中英

遍历数组中的对象并为每个对象添加属性

[英]Looping over objects in array and adding property to each

我正在获取文件数组,然后想将date和size属性添加到每个文件对象中,但是使用下面的代码,不会添加它们。 我知道那是我的fs.statSync(p + file).mtime.getTime()fs.statSync(p + file).size有值。

var files = fs.readdirSync(p);

files.sort(function(a, b) {
           return fs.statSync(p + a).mtime.getTime() - 
                  fs.statSync(p + b).mtime.getTime();
});

files.forEach(function(file) {
    file.date = fs.statSync(p + file).mtime.getTime();
    file.size = fs.statSync(p + file).size;
});

console.log('files::'+files); // doesn' have the new file.date and file.size property.

当您将值写入file变量时,它不会保存,因为file是存在于本地范围内的变量。 因此,一个快速的解决方案:

var files = fs.readdirSync(p),
    result = [];

files.sort(function(a, b) {
           return fs.statSync(p + a).mtime.getTime() - 
                  fs.statSync(p + b).mtime.getTime();
});

files.forEach(function(file) {
    file.date = fs.statSync(p + file).mtime.getTime();
    file.size = fs.statSync(p + file).size;
    result.push(file);
});

console.log('files::' + result);

file变量是局部变量。 无需像Eugene那样创建新数组,您可以通过以下方式更新原始数组:

var files = fs.readdirSync(p);

files.sort(function(a, b) {
           return fs.statSync(p + a).mtime.getTime() - 
                  fs.statSync(p + b).mtime.getTime();
});

files.forEach(function(file, index, array) {
    array[index].date = fs.statSync(p + file).mtime.getTime();
    array[index].size = fs.statSync(p + file).size;
});

console.log('files::'+files);

与Eugene的答案类似,但这使用map

files = files.map(function(file) {
  file.date = fs.statSync(p + file).mtime.getTime();
  file.size = fs.statSync(p + file).size;
  return file;
});

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM