我有一个getter从cookie中获取值。
现在我有了两个cookie,名字分别是shares=和obligation =。
我想让这个getter只从义务cookie中获取值。
我怎么做呢?因此for语句将数据拆分为单独的值,并将其放入数组中。
function getCookie1() {
// What do I have to add here to look only in the "obligations=" cookie?
// Because now it searches all the cookies.
var elements = document.cookie.split('=');
var obligations= elements[1].split('%');
for (var i = 0; i < obligations.length - 1; i++) {
var tmp = obligations[i].split('$');
addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
}
}
现在,当以数组格式存储cookie时,可以让cookie以数组形式返回。
例如,你的cookie数组[35]=Khóa;数组[36]= Tử;数组[37]= Cử;
这段代码也包含utf8。
当你的cookie名称内容[]在其中,而你存储的cookie不在数组中时,一件事不会很好地工作。
function getCookie(cname) {
var ca = decodeURIComponent(document.cookie).split(';');
if (cname.indexOf('[]') > 0) {
var returnVAlue = [];
var nameArray = cname.replace("[]", "");
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
// console.log(c);
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(nameArray) >= 0) {
var valueString = c.substr(nameArray.length, c.length);
var valueStringSlit = valueString.split('=');
valueStringSlit[0] = valueStringSlit[0].substr(1,(valueStringSlit[0].length - 2));
// console.log(valueStringSlit);
returnVAlue.push(valueStringSlit);
}
}
} else {
var returnVAlue = '';
var name = cname + "=";
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
// console.log(c);
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
returnVAlue = c.substr(name.length, c.length);
}
}
}
if (returnVAlue != ''){
return returnVAlue;
}
return "";
}
// console.log(decodeURIComponent(document.cookie));
console.log(getCookie('array[]'));
我会这样做:
function getCookie(cookie){
return cookie
.trim()
.split(';')
.map(function(line){return line.split(',');})
.reduce(function(props,line) {
var name = line[0].slice(0,line[0].search('='));
var value = line[0].slice(line[0].search('='));
props[name] = value;
return props;
},{})
}
这将以对象的形式返回cookie。
然后你可以这样调用它:
getCookie(document.cookie)['shares']