javascript 中没有 for 循环是否可以重写数组中的所有值?
Is possible to rewrite all values in array without for loop in javascript?
假设我们有一个包含如下数据的数组 (myArray):
0: myArray
content: 'something'
date: '15.5.2015'
name: 'Abc'
1: myArray
content: 'text'
date: '15.5.2015'
name: 'Bla'
2: etc ...
现在要重写此数组中一个对象属性的所有值(例如为空字符串)(例如:'content'),我会像这样使用 for 循环:
for(var i = 0; i < myArray.length; i++){
myArray[i].content = '';
}
所以结果是:
0: myArray
content: ''
date: '15.5.2015'
name: 'Abc'
1: myArray
content: ''
date: '15.5.2015'
name: 'Bla'
2: etc ...
我的问题是: 在 javascript 中不使用循环是否可以得到相同的结果?像这样:
myArray[all].content.RewriteInto('');
谢谢你的想法。
你所做的任何事情都会以某种方式循环结束。然而,你不必循环...
因为我们现在有了函数式数组方法!您可能正在寻找 map
or reduce
,也许两者都是,因为您想要转换(映射)每个元素 and/or 将它们合并为一个(减少)。
例如,我们可以将您的数据和 return 一个包含所有 content
字段的字符串连接起来,使用:
var data = [{
content: 'something',
date: '15.5.2015',
name: 'Abc'
}, {
content: 'text',
date: '15.5.2015',
name: 'Bla'
}];
var result = data.map(function(it) {
return it.content;
}).join(' ');
document.getElementById('r').textContent = JSON.stringify(result);
<pre id="r"></pre>
要从每个项目中删除 content
字段而不修改输入,您可以:
var data = [{
content: 'something',
date: '15.5.2015',
name: 'Abc'
}, {
content: 'text',
date: '15.5.2015',
name: 'Bla'
}];
var result = data.map(function(it) {
return {date: it.date, name: it.name};
});
document.getElementById('r').textContent = JSON.stringify(result);
<pre id="r"></pre>
你应该看看map function。
像这样使用它:
myArray.map(function (data) {
return data.content = 'value';
}
正如对您问题的第一条评论指出的那样,您总是必须使用循环,但是您可以使用如下原型猴子修补数组:
Array.prototype.rewriteInto = function(key, rewriteVal){
for(var k in this){
this[k][key] = rewriteVal;
}
};
var testData = new Array();
testData.push({
content: 'something',
date: '15.5.2015',
name: 'Abc',
});
testData.push({
content: 'something',
date: '15.5.2015',
name: 'bla',
});
console.log(testData);
testData.rewriteInto('content', '');
console.log(testData);
因此您不必每次都重写循环来使用此功能。
假设我们有一个包含如下数据的数组 (myArray):
0: myArray
content: 'something'
date: '15.5.2015'
name: 'Abc'
1: myArray
content: 'text'
date: '15.5.2015'
name: 'Bla'
2: etc ...
现在要重写此数组中一个对象属性的所有值(例如为空字符串)(例如:'content'),我会像这样使用 for 循环:
for(var i = 0; i < myArray.length; i++){
myArray[i].content = '';
}
所以结果是:
0: myArray
content: ''
date: '15.5.2015'
name: 'Abc'
1: myArray
content: ''
date: '15.5.2015'
name: 'Bla'
2: etc ...
我的问题是: 在 javascript 中不使用循环是否可以得到相同的结果?像这样:
myArray[all].content.RewriteInto('');
谢谢你的想法。
你所做的任何事情都会以某种方式循环结束。然而,你不必循环...
因为我们现在有了函数式数组方法!您可能正在寻找 map
or reduce
,也许两者都是,因为您想要转换(映射)每个元素 and/or 将它们合并为一个(减少)。
例如,我们可以将您的数据和 return 一个包含所有 content
字段的字符串连接起来,使用:
var data = [{
content: 'something',
date: '15.5.2015',
name: 'Abc'
}, {
content: 'text',
date: '15.5.2015',
name: 'Bla'
}];
var result = data.map(function(it) {
return it.content;
}).join(' ');
document.getElementById('r').textContent = JSON.stringify(result);
<pre id="r"></pre>
要从每个项目中删除 content
字段而不修改输入,您可以:
var data = [{
content: 'something',
date: '15.5.2015',
name: 'Abc'
}, {
content: 'text',
date: '15.5.2015',
name: 'Bla'
}];
var result = data.map(function(it) {
return {date: it.date, name: it.name};
});
document.getElementById('r').textContent = JSON.stringify(result);
<pre id="r"></pre>
你应该看看map function。 像这样使用它:
myArray.map(function (data) {
return data.content = 'value';
}
正如对您问题的第一条评论指出的那样,您总是必须使用循环,但是您可以使用如下原型猴子修补数组:
Array.prototype.rewriteInto = function(key, rewriteVal){
for(var k in this){
this[k][key] = rewriteVal;
}
};
var testData = new Array();
testData.push({
content: 'something',
date: '15.5.2015',
name: 'Abc',
});
testData.push({
content: 'something',
date: '15.5.2015',
name: 'bla',
});
console.log(testData);
testData.rewriteInto('content', '');
console.log(testData);
因此您不必每次都重写循环来使用此功能。