这就是问题。.我想覆盖angular.forEach中具有if-else条件的对象,使用此控制器,基本上“ k1”具有原始关键字,并且我希望将其替换为新关键字。您认为显示新输入对象的最佳方法是什么?
AWS.config.update({accessKeyId: 'my cred', secretAccessKey: 'my secret key', region: 'us-east-1'});
`// Load the SDK and UUID
var AWS = require('aws-sdk');
var uuid = require('node-uuid');
AWS.config.update({accessKeyId: '......', secretAccessKey: '.....', region: 'us-east-1'});
var s3 = new AWS.S3();
var bucketName = 'node-sdk-sample-' + uuid.v4();
var keyName = 'hello_world.txt';
s3.createBucket({Bucket: bucketName}, function() {
var params = {Bucket: bucketName, Key: keyName, Body: 'Hello World!'};
s3.putObject(params, function(err, data) {
if (err)
console.log(err)
else
console.log("Successfully uploaded data to " + bucketName + "/" + keyName);
});
});`
答案 0 :(得分:0)
您有不同的选择来执行此操作,如果您使用的是ES6或Typescript,则可以使用spread operator复制对象中的某些属性
let obj= { bar: true, foo1: true, foo2:true};
if(someValidation){
let { bar, ...rest} = obj;
obj = {
...rest,
newKey: bar, //or whatever value/key you want
}
}
现在,由于我仅在您的代码示例中看到了ES5代码,因此我认为您会使事情有些复杂,首先,使用forEach修改要迭代的同一数组不是一个好主意。 / p>
使用地图功能并在那里进行更改。您可以使用delete
operator来消除不需要的属性,但是众所周知,这存在一些性能问题,因此让我们采用以下方法:
$scope.campaigns = $scope.campaigns.map(function (v) {
a++
if (condition) {
return {
newBar: v.bar,
foo1: v.foo1,
foo2: v.foo2,
};
}
return v;
});
另一个好处是,现在您要创建一个新数组并替换当前的$scope
变量值一次,而不是修改每个元素,因为映射返回值将在创建新列表后完成。
如果需要动态遍历键,可以使用Object.keys
遍历键并执行相同的方法,创建一个新对象,然后将其返回到地图,或者返回相同的初始对象。 / p>
答案 1 :(得分:0)
使用hasOwnProperty方法来检测属性的存在:
$scope.SubmitKeyword = function (key, new_keyword) {
var obj = $scope.new_campaign_keywords;
console.log(key, new_keyword)
$scope.new_keyword = new_keyword;
if (!new_keyword) {
alert('Invalid input!');
return;
};
if (obj.hasOwnProperty(new_keyword)) {
alert('New keyword in use');
return;
};
//ELSE
console.log('changes detected');
obj[new_keyword] = obj[key];
delete obj[key];
};
使用delete运算符删除旧关键字。