将数组元素写入不同的文件

时间:2015-09-22 21:48:30

标签: javascript arrays node.js

我有一个看起来像这样的数组

var data=[["snp","3569#maspd"],["kpr","ant#$casd"]];

我想要做的是根据[1]元素的长度将此数据写入文件。

例如,让我们在数组中获取第一个元素(也是一个数组)

["snp","3569#maspd"]

[1]元素3569#maspd长度为10个字符= length=10,因此来自此数组的数据将写入文件“10.txt”

我为它写了一段代码

var result=cont.split("\n").
                map(function(r){return r.split(",").slice(2,4);//.join(":")
            }) //this creates array of arrays


    result.forEach(function(x){
        var length=x[1].length;
        var str=length.toString();


        var fil=length+".txt";
        var txt=x.join(":");
        fs.exists(fil,function(exist){
            if(exist){
                fs.appendFile(fil,txt,function(err){
                    if(err) console.log(err)
                })
            }
            else{
                fs.writeFile(fil,txt,function(err){
                    if(err) console.log(err)
                })
            }
        })

    }

    )

但它总是抛出错误“无法读取未定义的属性长度”。当我删除所有代码并仅保留

result.forEach(function(x){
    var length=x[1].length;
    var str=length.toString();
        console.log(str)
}
)

它有效,我在这里忽略了一个错误吗? 这是结果数组的示例值(使用随机数据)

var result=[[ '62346asd5f5510dda8f6223c557bb0bf0b5',
  'MH))WXlhs\'uOSu.iwJk[n}oz#w>T6L' ],
[ '00d7994173ds265bfe71182154a1143b0', '&Df1' ],
[ '1b6c32941719fcbfc76c6e5428e5f5',
  'Fc/0PG#mHb49&#)V|$Swrr7as_*UnL~Y' ],
[ 'f931c2256eca136c97a9a9af4dcae', '.a=]' ]]

2 个答案:

答案 0 :(得分:1)

您必须检查/清理输入并确保x有2个项目。

执行此操作的基本方法可能是从

更改
var length=x[1].length;

类似

var length= x[1] != undefined ? x[1].length : 0;

更好的方法是filter您可以对数据进行排列以确保其安全。

答案 1 :(得分:0)

我认为问题出在你的结果数组中。您很可能有不良数据或地图功能出现问题。使用您的示例数据运行下面的代码,它工作正常。您可以添加try catch来跳过它或将其注销,以便您可以看到导致问题的行。

{{1}}