按键/值引用更新Javascript对象值

时间:2016-05-02 17:18:15

标签: javascript jquery arrays

我有一个如下所示的javascript对象:

selectedUsers.push({
   qid   : qid,
   first : $(this).data('emp_first'),
   last  : $(this).data('emp_last'),
   department : $(this).data('emp_dept'),
   ntid : $(this).data('emp_ntid'),
   supFirst : $(this).data('emp_sup_first'),
   supLast : $(this).data('emp_sup_last'),
   supNTID : $(this).data('emp_sup_ntid'),
   title : ($(this).data('emp_title') ? $(this).data('emp_title') : 'N/A'),
   location: ($(this).data('emp_location') ? $(this).data('emp_location') : 'N/A'),
   skillset : ($(this).data('emp_skillset') ? $(this).data('emp_skillset') : 'N/A'),
   departmentID : $(this).data('emp_dept_id'),
   titleID : $(this).data('emp_title_id'),
   regionID : $(this).data('emp_region_id'),
   instances : ($(this).data('emp_instances') != '' ? $(this).data('emp_instances').split(',') : '')
});

在我的网页上执行操作时,我需要更新此对象中departmentID的值。

但是,我需要为对象中的特定结果执行此操作。

首先,我需要找到selectedUsers.qid = 'bob123'的结果,然后手动设置departmentID的值。

为了编辑特定密钥的值,搜索此结果的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

是否可以在" selectedUsers"中保存对象。所以" qid"是他们的关键?我假设,qid是唯一值。

selectedUsers = {};
selectedUsers[qid] = {
   first : $(this).data('emp_first'),
   last  : $(this).data('emp_last'),
   department : $(this).data('emp_dept'),
   ntid : $(this).data('emp_ntid'),
   supFirst : $(this).data('emp_sup_first'),
   supLast : $(this).data('emp_sup_last'),
   supNTID : $(this).data('emp_sup_ntid'),
   title : ($(this).data('emp_title') ? $(this).data('emp_title') : 'N/A'),
   location: ($(this).data('emp_location') ? $(this).data('emp_location') : 'N/A'),
   skillset : ($(this).data('emp_skillset') ? $(this).data('emp_skillset') : 'N/A'),
   departmentID : $(this).data('emp_dept_id'),
   titleID : $(this).data('emp_title_id'),
   regionID : $(this).data('emp_region_id'),
   instances : ($(this).data('emp_instances') != '' ? $(this).data('emp_instances').split(',') : '')
}

然后您需要做的就是

selectedUsers['bob123'].departmentID = yourNewValue;

如果不......

然后你必须循环整个数组(selectedUsers),直到找到qid与你的搜索匹配的数组。

for (var index=0, limit=selectedUsers.length; index < limit; ++index) {
    if(selectedUsers[index].qid == "bob123"){
      selectedUsers[index].deparmentID = "yourvalue";  
      break;
    }
}

答案 1 :(得分:0)

我假设这一切都发生在客户端而不是某些数据存储中。在这种情况下,我会调查lodash.js库 - 特别是find方法:

var users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];

_.find(users, function(o) { return o.age < 40; });
// → 

object for 'barney'

所以在你的情况下,你会有像

这样的东西
var user = _.find(selectedUsers, function (user) {user.qid === searchId; });
user.departmentID = someOtherId;
// whatever else you need to do

答案 2 :(得分:0)

用户underscore.js find功能

例如:
    std::function<void()> f = [fu=fu.share()]{ /* code */ };
    var user = _.find(selectedUsers, function (item) { return item.departmentID === deartmentID});

答案 3 :(得分:0)

假设selectedUsers是一个数组,你可以这样做:

function setSelectedUsersDepartment(qid, departmentID) {
    for (var i in selectedUsers) {
        var user = selectedUsers[i];
        if (user.qid === qid) {
            user.departmentID = departmentID;
        }
    }
}

或者,如果您可以使用ES6 Array.find功能(没有IE支持):

function setSelectedUsersDepartment (qid, newDepartmentID) {
    var user = selectedUsers.find(user => user.qid === qid);
    if (user !== undefined) {
        user.departmentID = newDepartmentID;
    }
}

如果你想为bob设置departmentID,你可以调用这个函数

setSelectedUsersDepartment('bob123', 'new_departmentID');