Javascript循环对象并操纵

时间:2017-03-02 16:23:10

标签: javascript jquery

我正在处理一个将对象(记录)传递给函数的函数。然后它遍历键并检查该键是否在我们的第二个对象(查找)中。如果匹配,它会将操作版本替换为记录中的值(将其转换为链接)。如果没有匹配,则保持其原始值。

这是我传递给函数的内容:

{ Source: "1234", NTID: "joeBob", Department: "x123", Email: 'joebob@example.com' }

- 这是功能

function createLink2(record) {

  // Link types
  var output = {
      'ntid': 'https://example.com/profile/',
      'email': 'mailTo:'
  };

  // Vars
  var i,
      key,
      keys = Object.keys(output);

  // Loop over our object keys
  Object.keys(record).forEach(function(k, ind) {

    // Loop over each of the link types
    for ( i = 0; i < keys.length; ++i ) {
      key = keys[i];

      // If our key matches that of our object, turn it into a link
      if(k.toLowerCase() == key){
        record = '<a href="'+ output[key] + record[k] + '" target="_blank">'+record[k]+'</a>';
      }else{
        // Return the original value of the property since its not a match. Not quite sure how to do this part.
      }

    }

  });
  return record;
}

我的目标是用<a href="mailto: joeBob@example.com">joeBob@example.com</a>取代电子邮件的价值,用<a href="https://example.com/profile/joeBob">joeBob</a>替换NTID。

我遇到的问题是返回 - 不太确定如何编辑数据并返回完整的对象。

3 个答案:

答案 0 :(得分:1)

更改此行:

record = '<a href="'+ output[key] + record[k] + '" target="_blank">'+record[k]+'</a>';

到此:

record[k] = '<a href="'+ output[key] + record[k] + '" target="_blank">'+record[k]+'</a>';

当然,您可以通过直接引用对象的属性来更轻松地完成此操作:

function createLink2(record) {

  // Link types
  var output = {
      'NTID': 'https://example.com/profile/',
      'Email': 'mailTo:'
  };

  // Loop over the output keys
  Object.keys(output).forEach(function(k, ind) {
    if(record.hasOwnProperty(k)) {
      record[k] = '<a href="' + output[k] + record[k] + '">' + record[k] + '</a>';
    }
  });
  return record;
}

请注意,您并非真的需要返回它,因为对象的内容将直接更改,如评论中其他人所述。

答案 1 :(得分:0)

Javascript对象通过引用传递。因此,如果您修改函数中的对象就足够了。例如:

function test(obj) {
  obj.a = 10
}

var x = {a: 2};
test(x);
console.log(x.a) //prints 10

所以,你所要做的就是修改&#34; Email&#34;无论你想要什么。

答案 2 :(得分:0)

您可以使用lapply(my_list, function(x) filter(x, grepl("blank", ROI))) # [[1]] # # A tibble: 1 × 3 # ROI Red Green # <chr> <dbl> <dbl> # 1 blank 1.9 1.1 # [[2]] # # A tibble: 2 × 3 # ROI Red Green # <chr> <dbl> <dbl> # 1 blank1 0.5 2 # 2 blank2 0.7 7

迭代数组并返回一个对象

&#13;
&#13;
.reduce()
&#13;
&#13;
&#13;