javascript - 返回 map 内的对象时获取“未定义的 "TypeError: Cannot read property ' 切片”

标签 javascript node.js

我有一个很大的文本文件,我正在循环遍历它,以便我可以将其格式化为 JSON 格式,然后转储它,当我使用 slice 使字段开始不同的位置,但是一旦我使用 slice,我就会收到以下错误:
类型错误:无法读取未定义的属性“切片”

这是当前代码:

var fs = require('fs');
let words;

fs.readFile('dictionary.txt', "utf-8", function(error, contents) {
    if(error) throw error;
    words = contents.split('\n\n');

    words = words.map(value => value.split('\n'))
    .map((column, index) => {
        return {
            id: index+1, 
            word: column[0].slice(10, -1), 
            translation: column[2].slice(7, -1), 
            description: column[3].slice(10, -1)
        }
    });

    fs.writeFileSync('words.json', JSON.stringify(words));
});

请记住,当我使用 console.log(column[0].slice(10, -1) 时,它工作得很好,但是当我在返回的对象中使用它时,我得到了错误,当我删除 slice 函数时,代码也可以工作,但这不是我想要的。

这是文本文件的示例:

English : To obliterate
لقی:  هونەر
كوردی: خاپووركردن
وردەكاری: خاپووركردن

English : to one's credit
لقی:  گشتی 
كوردی: جێی شانازی بوون بۆ كەسێك
وردەكاری: جێی شانازی بوون بۆ كەسێك

English : To outline
لقی:  هونەر
كوردی: كورتە نەخشەی كێشا
وردەكاری: كورتە نەخشەی كێشا

English : To paint without a model
لقی:  هونەر
كوردی: وێنەكێشانی بێ مۆدێل
وردەكاری: وێنەكێشانی بێ مۆدێل

English : To paste again
لقی:  هونەر
كوردی: سەرلەنوێ‌ لكاندنەوە
وردەكاری: سەرلەنوێ‌ لكاندنەوە

English : To patronize
لقی:  هونەر
كوردی: چاودێری 
وردەكاری: چاودێری (هونەرمەندێكی) كرد

English : To pick
لقی:  هونەر
كوردی: پیككاری كرد 
وردەكاری: پیككاری كرد (بەردەكەی تەختكرد)

English : To pick out by color
لقی:  هونەر
كوردی: دیاریكردن بەدژایەتی ڕەنگ 
وردەكاری: دیاریكردن بەدژایەتی ڕەنگ 

English : To plane
لقی:  هونەر
كوردی: دەپێكی سازكرد
وردەكاری:  (دەپێك)ی سازكرد

最佳答案

如果文件末尾有 \n\n,请添加一个过滤器以删除最后一个无效的“ block ”

此外,如果文件中存在 \n\n\n 或更多内容,您可能也需要修复它

var fs = require('fs');
let words;

fs.readFile('dictionary.txt', "utf-8", function(error, contents) {
    if(error) throw error;
    //               in case there's \n\n\n
    words = contents.replace(/\n{3,}/g, '\n\n').split('\n\n');

    words = words.map(value => value.split('\n'))
    // filter out last block if file ends in \n\n
    .filter(({length}) => length === 4)
    .map((column, index) => {
        return {
            id: index+1, 
            word: column[0].slice(10, -1), 
            translation: column[2].slice(7, -1), 
            description: column[3].slice(10, -1)
        }
    });

    fs.writeFileSync('words.json', JSON.stringify(words));
});

这有点更强大,但可能仍然不完美

关于javascript - 返回 map 内的对象时获取“未定义的 "TypeError: Cannot read property ' 切片”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52564803/

相关文章:

javascript - 数组/HTML 中的函数

javascript - 自定义滚动条

javascript - 图像悬停时的 float 文本叠加

javascript - uglify 捆绑文件并将它们都放在 webpack 中?

javascript $.ajax 返回对象 Object

node.js - Node js cpu 100%

AWS Lightsail 的 Bitnami 控制台关闭后,Node.js 应用程序就会停止工作

javascript - 如何让 react 达到一定量后消失?

node.js - 如何使用 Gramjs 和 Telegram API 下载媒体文件?

javascript - 在 div 上添加自定义动画类不起作用?