我有很多对象:
var myObj = {
a: "aaa",
b: "bbb",
c: "ccc",
d: "ddd",
...
}
我想创建一个新的对象数组,它包含除前两个对象之外的所有对象:
var myObj2 = {
c: "ccc",
d: "ddd",
...
}
显然myObj.slice(2)
不起作用(我想要它),我不能通过名称(myObj.c, myObj.d, etc
)选择它们,因为有超过100个对象,并且可能还有更多要添加。
在对象数组中选择一系列对象的最佳方法是什么?
答案 0 :(得分:2)
您可能想要重新构思,但这是一种通用方法。
首先,这是带有一些可排序键的对象:
var obj = {B201: "apple", B342: "orange", B123: "pear"}
然后在排序后创建前两个键的数组:
var arr = Object.keys(obj).sort().slice(0,2);
返回["B123", "B201"]
。
定义一个根据键名删除对象属性的函数:
function remove (e, i, a) {delete obj[e];};
然后为每个属性调用该函数:
arr.forEach(remove);
您应该删除“前两个”属性的对象:
Object {B342: "orange"}
答案 1 :(得分:1)
假设您有一个像这样的对象数组
myObj = [
{
a: "aaa",
b: "bbb",
c: "ccc",
d: "ddd",
...
},
{
a: "aaa",
b: "bbb",
c: "ccc",
d: "ddd",
...
},
{
a: "aaa",
b: "bbb",
c: "ccc",
d: "ddd",
...
},
{
a: "aaa",
b: "bbb",
c: "ccc",
d: "ddd",
...
},
];
现在为主数组
运行一个循环在循环内部通过数组内的每个对象。
在每个回合中增加一个计数器并检查它是否大于2然后再次将其插入主阵列myObj
$.each(myObj, function( index, value ) {
var counter = 0;
$.each(value, function( index2, value2 ) {
counter++;
if(counter > 2){
myObj[] = value;
}
});
});
如果你的主要数组对象有不同的结构 会有轻微的变化
答案 2 :(得分:1)
您可以使用以下方法删除您不想要的密钥
var myObj = {a: "aaa",b: "bbb",c: "ccc",d: "ddd"}
function filterObject(obj,filterObject){
var newObj = {}
for(key in obj){
if(!filterObject[key]){
newObj[key] = obj[key];
}
}
return newObj;
}
console.log(filterObject(myObj,{a:true,b:true}))
示例输出:
{ c: 'ccc', d: 'ddd' }