根据字段过滤对象';javascript中的s值
我对javascript有点陌生。在这里,我有以下目标:根据字段过滤对象';javascript中的s值,javascript,jquery,Javascript,Jquery,我对javascript有点陌生。在这里,我有以下目标: obj = { 0:{id:1, location: loc1, title:title1}, 1:{id:2, location: loc2, title:title2}, 2:{id:3, location: loc1, title:title3}, 3:{id:4, location: loc3, title:title4}, 4:{id:5, location: loc1, title:title5} } 我需要的是根
obj = {
0:{id:1, location: loc1, title:title1},
1:{id:2, location: loc2, title:title2},
2:{id:3, location: loc1, title:title3},
3:{id:4, location: loc3, title:title4},
4:{id:5, location: loc1, title:title5}
}
我需要的是根据对象的值按位置过滤对象,并创建一个新对象,如下所示:
obj = {
loc1:{
0:{id:1, location: loc1, title:title1},
1:{id:3, location: loc1, title:title3},
2:{id:5, location: loc1, title:title5}
},
loc2:{
0:{id:2, location: loc2, title:title2}
}
loc3:{
0:{id:4, location: loc3, title:title4}
}
}
如何实现上述目标
我尝试使用for
和将推送到一个新的数组
,但位置应该是动态的,将来可能会更改,我希望有一个对象可以像上面那样管理
var theLoc1 = [], theLoc2 = [];
for(var i = 0; i < response.length; i++) {
if(response[i].location == 'loc1'){
theLoc1.push(response[i]);
}else if(response[i].location == 'loc2'){
theLoc2.push(response[i]);
}
}
var theLoc1=[],theLoc2=[];
对于(变量i=0;i
我认为更好的方法是将已经在后端的对象分组。您可以使用linq函数.GroupBy(x=>x.location)
这几乎是同一个问题:
如果您的loc1、loc2、loc3已修复,您可以尝试以下操作。(这是我读了你的问题后理解的)
var响应=[
{id:1,位置:“loc1”,标题:“title1”},
{id:2,位置:“loc2”,标题:“title2”},
{id:3,地点:“loc1”,标题:“title3”},
{id:4,位置:“loc3”,标题:“title4”},
{id:5,位置:“loc1”,标题:“title5”}
]
var resObj={
已出版:[],
私人:[],
待定:[]
}
对于(变量i=0;i console.log(resObj)
此代码是您真正需要的:
obj = [
{ id: 1, location: 'loc1', title: 'title1' },
{ id: 2, location: 'loc2', title: 'title2' },
{ id: 3, location: 'loc1', title: 'title3' },
{ id: 4, location: 'loc3', title: 'title4' },
{ id: 5, location: 'loc1', title: 'title5' }
];
var locations = {};
for (var i = 0; i < obj.length; i++) {
locations[obj[i].location] = [];
}
console.log(locations);
for (var i = 0; i < obj.length; i++) {
locations[obj[i].location].push(obj[i]);
}
console.log(locations);
obj=[
{id:1,位置:'loc1',标题:'title1'},
{id:2,位置:'loc2',标题:'title2'},
{id:3,位置:'loc1',标题:'title3'},
{id:4,位置:'loc3',标题:'title4'},
{id:5,位置:'loc1',标题:'title5'}
];
变量位置={};
对于(变量i=0;i
**更新:它可以在一个for循环中完成,但出于简单的原因,我这样写**
let obj;
for(var i = 0; i < response.length; i++) {
if( !Object.hasOwnProperty(obj, response[i].location)
{ obj[response[i].location] = []; }
obj[response[i].location].push(response[i]);
}
您可以使用它来构造具有位置名称的新对象,所以即使有一天您得到“location999”,它仍然可以工作
我放置了if
,它检查对象是否已经具有该属性,因为您希望该属性是一个数组。如果不是,你可以像我的例子中那样把值放在里面,但是我不确定推送是否能对它起作用,所以我将它初始化为空数组以防万一。您可以自己检查它,如果不需要,可以使用它来编辑。//创建一个数组;
// create an array of arrays;
var groupOfLocations[];
// loop on your locations
for(var i = 0; i < response.length; i++) {
// push if already existing
for(var iGroup = 0; iGroup < groupOfLocations.length; iGroup++) {
if(groupOfLocations[iGroup][0].location == response[i].location) {
groupOfLocations[iGroup].push(response[i]); break;
}
// create a new array if not found
if(iGroup >= groupOfLocations.length) groupOfLocations.push(new array(response[i]));
}
变异系数组[];
//在你的位置上循环
对于(变量i=0;i=groupOfLocations.length)groupOfLocations.push(新数组(响应[i]);
}
May包含语法错误,但想法就在这里。我使用函数式编程的解决方案
const obj = {
0: { id: 1, location: 'loc1', title: 'title1' },
1: { id: 2, location: 'loc2', title: 'title2' },
2: { id: 3, location: 'loc1', title: 'title3' },
3: { id: 4, location: 'loc3', title: 'title4' },
4: { id: 5, location: 'loc1', title: 'title5' }
};
const result = Object.keys(obj).reduce((newObject, item) => {
const location = obj[item].location;
const index = newObject[location] ? Object.keys(newObject[location]).length : 0;
return {
...newObject,
[location]: {
...newObject[location],
[index]: obj[item]
}
};
}, {});
console.log(result);
为了按位置对项目进行分组,您可以迭代数组,查看其位置是否已分组,如果未分组,则为其创建一个新组。然后将项目添加到相应的组中
var obj = [
{id: 1, location: "loc1", title: "title1"},
{id: 2, location: "loc2", title: "title2"},
{id: 3, location: "loc1", title: "title3"},
{id: 4, location: "loc3", title: "title4"},
{id: 5, location: "loc1", title: "title5"}
];
var formattedArray = new Array();
for (var i = 0; i < obj.length; i++) {
if (!formattedArray[obj[i].location]) {
formattedArray[obj[i].location] = new Array();
}
formattedArray[obj[i].location].push(obj[i]);
}
console.log(formattedArray);
var obj=[
{id:1,位置:“loc1”,标题:“title1”},
{id:2,位置:“loc2”,标题:“title2”},
{id:3,地点:“loc1”,标题:“title3”},
{id:4,位置:“loc3”,标题:“title4”},
{id:5,位置:“loc1”,标题:“title5”}
];
var formattedArray=新数组();
对于(变量i=0;i
JSFIDLE示例代码:
基于您分配值的算法?@IbraHimM.Nada否,位置值是字符串。还要注意,位置值不是固定的,可以有一个新值。请检查我的答案是否为100%您需要的值实际上位置值不是固定的。并且可以有一个新值。很酷,您可以使用@ibrahim-Nada snippet。只需选择t(var i=0;i位置[obj[i]。位置=[];
-您无法更新对象,只需创建一个新的
var obj = [
{id: 1, location: "loc1", title: "title1"},
{id: 2, location: "loc2", title: "title2"},
{id: 3, location: "loc1", title: "title3"},
{id: 4, location: "loc3", title: "title4"},
{id: 5, location: "loc1", title: "title5"}
];
var formattedArray = new Array();
for (var i = 0; i < obj.length; i++) {
if (!formattedArray[obj[i].location]) {
formattedArray[obj[i].location] = new Array();
}
formattedArray[obj[i].location].push(obj[i]);
}
console.log(formattedArray);