如何更新此代码以保存值数组?我想持有FIELDNAME和VALUE。
我想通过执行以下操作来设置/添加到列表中 - 向数组/列表添加值。
userFilters.setData(' lastname', 'smith');
userFilters.setData(' firstname', 'bob');
userFilters.setData(' Mi', 'D');
让对象持有一个
数组'lastname','smith'
'firstname','bob'
'mi','D'
App.factory('userFilters', [function () {
var data = {};
var getData = function (field) {
return data[field];
};
var setData = function (field, value) {
data[field] = value;
};
return {
getData: getData,
setData: setData
}
}]);
答案 0 :(得分:2)
您可以相当简单地重新创建它,而无需您正在创建的方法。
Javascript对象旨在完全按照您的要求进行操作。
App.factory('userFilters', function() {
return {};
});
您可以使用方括号访问器来获取和设置值,而不是使用getter和setter。
// setting properties
userFilters['lastname'] = 'smith';
userFilters['firstname'] = 'bob';
userFilters['Mi'] = 'D';
// getting properties
userFilters['lastname']; // 'smith'
userFilters['firstname']; // 'smith'
如果您希望能够完全控制在获取/设置时间发生的事情,您可以查看使用内部getters和setters拦截这些来电,让您知道之前的属性名称手。
最后,您还可以在对象周围包装自己的get和set函数以隐藏它。但是,这将作为一种服务更有意义。
App.service('userFilters', function() {
var store = {};
this.get = function(key) {
return store[key];
};
this.set = function(key, value) {
store[key] = value;
};
});
如果您的工厂/服务公开数组非常重要,那么我建议您坚持使用对象存储键和值,但添加数组导出方法。
App.service('userFilters', function() {
var store = {};
this.toArray = function() {
var records = [];
return Object.keys(store).map(function(key) {
records.push([key, store[key]]);
});
};
this.get = function(key) {
return store[key];
};
this.set = function(key, value) {
store[key] = value;
};
});
如果要遍历属性,可以使用for-in循环。
for(var key in userFilters) {
var value = userFilters[key];
console.log(key, value);
}
您还可以使用Object.keys
方法检查是否有任何密钥。
Object.keys(userFilters); // ['lastname', 'firstname', 'Mi']
这将返回对象中所有键的数组。如果它的长度为0,那么你就知道它是空的。
答案 1 :(得分:1)
要使用数组进行存储,您需要同时更新getData
和setData
方法,并将data
定义为数组[]
:
App.factory('userFilters', [function () {
var data = [];
var getData = function (field) {
for(var i=0; i<data.length; i+=2) {
if(data[i] == field) {
return data[i+1];
}
}
return null;
};
var setData = function (field, value) {
data = data.concat([field, value]);
};
return {
getData: getData,
setData: setData
}
}]);