更改自定义数组中键的值

时间:2014-08-07 16:08:57

标签: javascript jquery underscore.js arrays

单击ASC或DESC链接以获取fieldname并创建一个key:value对象并将其推送到一个数组; 如果key存在,则使用所选的click事件替换该值并更新数组key:value;

实施例

单击按名称排序 - DESC:

[{"name":"desc"}]

再次单击按名称排序 - ASC:

[{"name":"asc"}]

单击按年龄排序 - DESC:

[{"name":"asc"},{"age":"desc"}]

再次单击按名称排序 - DESC:

[{"name":"desc"},{"age":"desc"} ]

DEMO LINK

$scope.clickME = function(fieldName, orderType) {

    var obj = {};
    obj[fieldName] = orderType;

    updateArray($scope.sortList, obj);

  }

 var updateArray = function(array, newObject) {
  //console.log(newObject);
  var hash = {};
  var i = 0;
    for (i = 0; i < array.length; i++) {
        hash = array[i];
        console.log(array[i]);
        console.log(hash.hasOwnProperty(newObject));
        //How to check the key is same? not the value as am passing same key but value are different
        if (!hash.hasOwnProperty(newObject)) {

        //check for the value and replace it 
        //    object[fieldName] = (newObject[fieldName] === 'asc') ? 'desc' : 'asc';
        //    return;
        }
    }
    array.push(newObject);
};

1 个答案:

答案 0 :(得分:1)

您可以使用jquery extend方法。它需要两个对象并将新对象添加到原始对象中并替换原始对象。

$scope.clickMe = function(fieldName, orderType)
{
    var obj = {};
    obj[fieldName] = orderType;
    $.extend($scope.sortList, obj);
}

由于您已经将它们都投射到对象上,因此您只需直接使用extend。

如果你想使用字符串而不进行演员表,你可以这样做。

$scope.sortList[fieldName] = orderType;

如果它存在,它将替换该值,如果不是,则添加一个值