es6代码在es5中被破坏了

Kiw*_*isi 0 html javascript ecmascript-6

我一直试图将我的代码从es6转换为es5,因为我的工作中有一些框架限制......虽然我一直在努力找到问题所在.由于某种原因,代码不能完全相同,并且没有错误......

有人可以告诉我,如果我已正确翻译?

这是ES6代码:

function filterFunction(items, filters, stringFields = ['Title', 'Description'], angular = false) {
    // Filter by the keys of the filters parameter
    const filterKeys = Object.keys(filters);

    // Set up a mutable filtered object with items
    let filtered;

    // Angular doesn't like deep clones... *sigh*
    if (angular) {
        filtered = items;
    } else {
        filtered = _.cloneDeep(items);
    }

    // For each key in the supplied filters
    for (let key of filterKeys) {
        if (key !== 'TextInput') {
            filtered = filtered.filter(item => {

                // Make sure we have something to filter by...
                if (filters[key].length !== 0) {
                    return _.intersection(filters[key], item[key]).length >= 1;
                }

                return true;
            });
        }

        // If we're at TextInput, handle things differently
        else if (key === 'TextInput') {
            filtered = filtered.filter(item => {
                let searchString = "";

                // For each field specified in the strings array, build a string to search through
                for (let field of stringFields) {
                    // Handle arrays differently
                    if (!Array.isArray(item[field])) {
                        searchString += `${item[field]} `.toLowerCase();
                    } else {
                        searchString += item[field].join(' ').toLowerCase();
                    }
                }

                // Return the item if the string matches our input
                return searchString.indexOf(filters[key].toLowerCase()) !== -1;
            });
        }
    }
    return filtered;
}
Run Code Online (Sandbox Code Playgroud)

这是我翻译的代码,部分99%工作..

function filterFunction(items, filters, stringFields, angular) {
    // Filter by the keys of the filters parameter
    var filterKeys = Object.keys(filters);

    // Set up a mutable filtered object with items
    var filtered;

    // Angular doesn't like deep clones... *sigh*
    if (angular) {
        filtered = items;
    } else {
        filtered = _.cloneDeep(items);
    }

    // For each key in the supplied filters
    for (var key = 0 ;  key < filterKeys.length ; key ++) {

        if (filterKeys[key] !== 'TextInput') {
            filtered = filtered.filter( function(item) {

                // Make sure we have something to filter by...
                if (filters[filterKeys[key]].length !== 0) {
                    return _.intersection(filters[filterKeys[key]], item[filterKeys[key]]).length >= 1;
                }

                return true;
            });
        }

        // If we're at TextInput, handle things differently
        else if (filterKeys[key] === 'TextInput') {
            filtered = filtered.filter(function(item) {
                var searchString = "";

                // For each field specified in the strings array, build a string to search through
                for (var field = 0; field < stringFields.length; field ++) {
                    // Handle arrays differently
                    console.log(field);
                    if (!Array.isArray(item[stringFields[field]])) {
                        searchString += item[stringFields[field]] + ' '.toLowerCase();
                    } else {
                        searchString += item[stringFields[field]].join(' ').toLowerCase();
                    }
                }

                // Return the item if the string matches our input
                return searchString.indexOf(filters[filterKeys[key]].toLowerCase()) !== -1;
            });
        }
    }
    return filtered;
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

这两行

searchString += `${item[field]} `.toLowerCase();
searchString += item[stringFields[field]] + ' '.toLowerCase();
Run Code Online (Sandbox Code Playgroud)

确实不等同.要toLowerCase在字符串的所有部分上应用该方法,您需要将ES5连接包装在括号中:

searchString += (item[stringFields[field]] + ' ').toLowerCase();
Run Code Online (Sandbox Code Playgroud)

或者,因为空白无论如何都不能低,只需使用

searchString += item[stringFields[field]].toLowerCase() + ' ';
Run Code Online (Sandbox Code Playgroud)