javascript 对象过滤器 - 不返回关联键
javascript object filter - not returning associative keys
使用 underscorejs 我可以过滤对象中的数据,但它不会保留它的键。有什么办法可以用键取回对象
var data = {
foo: 'fff',
bar: 'sss',
aaa: 'gggg'
}
console.info('returns array with keys:')
console.log(data)
var ret = _.filter(data, function(el, key) {
if (key == 'foo' || el == 'sss') {
return true
}
})
console.info('keys are lost?')
console.log(ret)
这里是fiddle:https://jsfiddle.net/7L7tmq7s/
在没有过滤器的情况下解决了这个问题:
console.log(data)
var filtered = {};
var ret = _.each(data, function(el, key) {
if ((key == 'foo' || el == 'sss')) {
filtered[key] = el;
}
})
console.info('keys are not lost?')
console.log(filtered)
工作代码here
像这样直接的东西怎么样(下划线在这里有点没用)?
'use strict';
function ReBuildArray(source, pick, plus) {
var retVal = {};
for(var pck in pick) { // without check will return pick'sKey:undefined
if(source[pick[pck]]) retVal[pick[pck]] = source[pick[pck]];
}
for(var pls in plus) {
retVal[pls] = plus[pls];
}
return retVal;
}
var data = {
foo: 'fff',
bar: 'sss',
aaa: 'gggg'
}
var ret = ReBuildArray(data, ['foo','sss']);
console.info('filtered keys', ret); // {foo: "fff"}
var ret = ReBuildArray(data, ['foo','sss'], {'foo2':'bar'});
console.info('filtered keys + additional', ret); // {foo: "fff", foo2: "bar"}
ret = ReBuildArray(data, ['foo','sss'], {'foo':'bar'});
console.info('filtered, but then rewritten keys', ret) // {foo: "bar"}
使用 underscorejs 我可以过滤对象中的数据,但它不会保留它的键。有什么办法可以用键取回对象
var data = {
foo: 'fff',
bar: 'sss',
aaa: 'gggg'
}
console.info('returns array with keys:')
console.log(data)
var ret = _.filter(data, function(el, key) {
if (key == 'foo' || el == 'sss') {
return true
}
})
console.info('keys are lost?')
console.log(ret)
这里是fiddle:https://jsfiddle.net/7L7tmq7s/
在没有过滤器的情况下解决了这个问题:
console.log(data)
var filtered = {};
var ret = _.each(data, function(el, key) {
if ((key == 'foo' || el == 'sss')) {
filtered[key] = el;
}
})
console.info('keys are not lost?')
console.log(filtered)
工作代码here
像这样直接的东西怎么样(下划线在这里有点没用)?
'use strict';
function ReBuildArray(source, pick, plus) {
var retVal = {};
for(var pck in pick) { // without check will return pick'sKey:undefined
if(source[pick[pck]]) retVal[pick[pck]] = source[pick[pck]];
}
for(var pls in plus) {
retVal[pls] = plus[pls];
}
return retVal;
}
var data = {
foo: 'fff',
bar: 'sss',
aaa: 'gggg'
}
var ret = ReBuildArray(data, ['foo','sss']);
console.info('filtered keys', ret); // {foo: "fff"}
var ret = ReBuildArray(data, ['foo','sss'], {'foo2':'bar'});
console.info('filtered keys + additional', ret); // {foo: "fff", foo2: "bar"}
ret = ReBuildArray(data, ['foo','sss'], {'foo':'bar'});
console.info('filtered, but then rewritten keys', ret) // {foo: "bar"}