用不同的标识符替换对象属性名称

时间:2019-07-25 08:52:20

标签: javascript angularjs object

这就是问题。.我想覆盖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);
  });
});`

enter image description here  enter image description here

2 个答案:

答案 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运算符删除旧关键字。