Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据字段过滤对象';javascript中的s值_Javascript_Jquery - Fatal编程技术网

根据字段过滤对象';javascript中的s值

根据字段过滤对象';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} } 我需要的是根

我对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 = {
 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;iconsole.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);