[Object, Object, Object, prevObject: jQuery.fn.init[3], context: undefined]
0: Object
1: 1
2: 2
3: 7
__proto__: Object
1 : Object
1: 6
2: 2
3: 5
6: 15
__proto__: Object
2 : Object
1: 3
2: 2
3: 5
5: 7
__proto__: Object
context: undefined
length: 3
prevObject: jQuery.fn.init[3]
__proto__: jQuery[0]
您会注意到每个对象都具有相同的键:1,2,3
但第二个对象有键:6 ,第三个对象有键:5
我需要选择这些键(或键/值对)。
我该怎么做?如果有一个好的库,我可以使用库。
答案 0 :(得分:0)
在我看来,你正在以错误的方式使用JQuery。您的JQuery对象中应该有DOM对象,如果您查看JQuery对象中的context属性,则表示未定义..
除此之外,要按键和值相等进行过滤,我建议如下:
var yourCollection = [{1:1, 2:2, 3:7},
{1:6, 2:2, 3:5, 6:15},
{1:3, 2:2, 3:5, 5:7}];
yourCollection.forEach(function(item){
Object.keys(item).forEach(function(property){
if(parseInt(property, 10) % item[property] === 0){
delete item[property];
}
})
})
输出是:
[[object Object] {
3: 7
}, [object Object] {
1: 6,
3: 5,
6: 15
}, [object Object] {
1: 3,
3: 5,
5: 7
}]
编辑:通过对称差异过滤收集。你说你会同意使用lib,所以我建议使用lodash(实用程序库)。
var yourCollection = [{1:1, 2:2, 3:7},
{1:6, 2:2, 3:5, 6:15},
{1:3, 2:2, 3:5, 5:7}];
var keyMap = _.map(yourCollection, function(item){
return _.map(Object.keys(item), function(property){
return parseInt(property, 10);
})
})
var reducedKeyMap = _.xor(_.flatten(_.initial(keyMap)), _.last(keyMap));
var symmetricDifference = [];
symmetricDifference = _.reduce(yourCollection, function(result, next, index, collection){
var substrat = _.pick(next, reducedKeyMap);
if(!_.isEmpty(substrat)){
result.push(substrat);
}
return result;
}, [])
document.write(JSON.stringify(symmetricDifference));
输出是:
[{"6":15},{"5":7}]
答案 1 :(得分:0)
执行嵌套循环并匹配键。
var arr = [
{ 1: 1, 2: 2, 3: 7 },
{ 1: 6, 2: 2, 3: 5, 6: 15 },
{ 1: 3, 2: 2, 3: 5, 5: 7 },
];
var output = document.getElementById('output');
for(var x=0;x<arr.length;x++){
for(var key in arr[x]){
var keysToAvoid = ['1','2','3'];
if(keysToAvoid.indexOf(key) == -1){
output.innerHTML = output.innerHTML + arr[x][key] + '<br>'; //gotcha!
}
}
}
<span id="output"></span>
答案 2 :(得分:0)
但第二个对象有键:6 ,第三个对象有键:5
我需要选择这些键(或键/值对)。
尝试使用keys
,.map()
,Object.keys()
,.slice()
,.splice()
创建包含要过滤的对象内属性的数组.indexOf()
过滤obj
的属性键; .filter()
删除undefined
值.get()
以将返回值从jQuery对象转换为Array
;当.map()
定义为返回过滤值数组
obj
上调用keys
var obj = $([{
1: 2,
2: 2,
3: 7
}, {
1: 6,
2: 2,
3: 5,
6: 15
}, {
1: 3,
2: 5,
3: 5,
5: 7
}]);
// But second object has a key: 6 and the third object has a key: 5
var keys = $(obj).map(function(index, value) {
// return array of property keys from `obj`
return Object.keys(value)
}).get().map(function(v, k, arr) {
// `j`: copy of original array of property keys from `obj`,
// `i`: current value `v` removed from `j` utilizing `k` index
var j = arr.slice(), i = j.splice(k, 1)[0];
// if copy of `arr` `j` does not contain `v` a duplicate entry of `v`,
// return `i`: `v` removed from `j`, else return `null`
return j.indexOf(v) === -1 ? i : null
}).filter(Boolean) // `["6", "5"]`
// return array of values , where item within `keys` property of
// an object within `obj`
, res = $(obj).map(function(key, val) {
var i = Object.keys(val).filter(function(v, k) {
return keys.indexOf(v) !== -1
})[0];
return val[i];
}).get();
// do stuff with `res`
document.write(res); // from `obj` property, value `6:15` , `5:7` : `15, 7`
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>