在JavaScript中连接自定义对象数组的字符串

Concatenate Strings of Custom Object Array in JavaScript

本文关键字:数组 字符串 对象 自定义 JavaScript 连接      更新时间:2023-09-26

我正在与一个返回响应的web服务通信。响应可以包含错误集合。我需要遍历集合并连接所有原因。这是代码:

var errorText = "";
for ( var i = 0; i < response.errors.count; i++ ) {
    errorText += response.errors[i].reason; 
}

这很管用!但我认为必须有一种更紧凑的方式。

使用Array.prototype.mapArray.prototype.join

var response = {
  errors: [{
    reason: 'invalid username'
  }, {
    reason: 'invalid password'
  }, {
    reason: 'required field'
  }]
};
var errorText = response.errors.map(function(errorObject) {
  return errorObject.reason;
}).join('');
/*with shorter ES6 syntax
var errorText = response.errors.map(errorObject => errorObject.reason).join('');
*/
console.log(errorText);

前臂?

var errorText = "";
response.errors.forEach(function(element) {
    errorText += element.reason;
});

编辑:一些澄清。

foreach比for循环更好,尤其是因为JavaScript不强制执行连续元素。

假设你的数组是这样的:{1, 2, 3, undefined, 4, 5, 6, undefined, 7}

for循环显然会迭代包含未定义的值,而forEach则不会。

请注意,如果使用的是对象而不是数组,则forEach将不起作用。您将需要:

var errorText = "";
Object.keys(response.errors).forEach(function(key) {
    errorText += response.errors[key];
});

当使用对象时,这比forfor ... in要好得多。然而,在这种情况下,我假设它是一个数组,但如果没有更多信息,我无法确定。

使用一个内衬和ES6 的乐趣

const errorText = response.errors.map(err => err.reason).join(" ");

http://jsfiddle.net/ya26m2dq/1/