【问题标题】:How to replace array values with values in another array using gulpjs如何使用 gulpjs 将数组值替换为另一个数组中的值
【发布时间】:2016-08-16 10:53:45
【问题描述】:

我有一个 XML 文件,我需要将属性值替换为使用 GulpJS 的数组中的值。数组 users1 中已有的属性值需要替换为 users2 数组中的项目。

JavaScript 代码:

var gulp = require('gulp');
var replace = require('gulp-replace');
var rs = require('replacestream');
var through = require('through2');

gulp.task('default', function() {
    //array is dynamic
    var users1 = ["existing_value1", "existing_value2", "existing_value3"];
    var users2 = ["new_value1", "new_value2", "new_value3"];
    var num = users.length();

        gulp.src(['idmap/*.xml'])
            .pipe(replaceArray(users1, users2))
            .pipe(gulp.dest('build/'));
});


function replaceArray(searchArray, replacement) {
    return through.obj(function(file, encoding, callback) {
        if (file.isBuffer()) {
            var result = searchArray.reduce(function(contents, searchArray) {
                return contents.split(searchArray).join(replacement);
            }, String(file.contents));
            file.contents = new Buffer(result);
            return callback(null, file);
        }
        callback(null, file);
    });
}

示例 XML:

<?xml version="1.0"?><IDMAP>
<RECORD>
    <TOKEN data="414" />
    <NAME data="existing_value1" />
</RECORD>
<RECORD>
    <TOKEN data="420" />
    <NAME data="existing_value2" />
</RECORD>
<RECORD>
    <TOKEN data="361" />
    <NAME data="existing_value3" />
</RECORD></IDMAP>

使用上面的代码,我将 XML 中的所有值(users1 数组)替换为 users2 数组中的逗号分隔值。如何用数组中对应的项替换所有项?

提前致谢!

【问题讨论】:

    标签: javascript arrays replace gulp gulp-replace


    【解决方案1】:

    您的replaceArray() 函数不是必需的。你已经require() gulp-replace 插件,所以我建议你使用它。使用gulp-replace时,解决方案变得微不足道:

    var gulp = require('gulp');
    var replace = require('gulp-replace');
    
    gulp.task('default', function() {
      var users1 = ["existing_value1", "existing_value2", "existing_value3"];
      var users2 = ["new_value1", "new_value2", "new_value3"];
    
      var stream = gulp.src(['idmap/*.xml']);
      users1.forEach(function(u, i) {
        stream = stream.pipe(replace(users1[i], users2[i]));
      });
      return stream.pipe(gulp.dest('build/'));
    });
    

    【讨论】:

    • 感谢@sven! code gulp.task('default', function() { var stream = gulp.src(['idmap/*.xml']); for (i=0;icode 这工作..!
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2022-07-21
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2015-03-24
    相关资源
    最近更新 更多