单击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"} ]
$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);
};
答案 0 :(得分:1)
您可以使用jquery extend方法。它需要两个对象并将新对象添加到原始对象中并替换原始对象。
$scope.clickMe = function(fieldName, orderType)
{
var obj = {};
obj[fieldName] = orderType;
$.extend($scope.sortList, obj);
}
由于您已经将它们都投射到对象上,因此您只需直接使用extend。
如果你想使用字符串而不进行演员表,你可以这样做。
$scope.sortList[fieldName] = orderType;
如果它存在,它将替换该值,如果不是,则添加一个值