Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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数组使用键值条件对唯一对象进行排序_Javascript_Arrays_Sorting_Object_Javascript Objects - Fatal编程技术网

Javascript数组使用键值条件对唯一对象进行排序

Javascript数组使用键值条件对唯一对象进行排序,javascript,arrays,sorting,object,javascript-objects,Javascript,Arrays,Sorting,Object,Javascript Objects,我有一个数组 "datawithisNew": [ { "exam_name": "MPSC", "isNew": false }, { "exam_name": "MPSC", "isNew":

我有一个数组

"datawithisNew": [
        {
            "exam_name": "MPSC",
            "isNew": false
        },
        
        {
            "exam_name": "MPSC",
            "isNew": true
        },
        {
            "exam_name": "UPSC",
            "isNew": false
        },
      
        {
            "exam_name": "RAILWAY",
            "isNew": false
        },
        {
            "exam_name": "RAILWAY",
            "isNew": false
        }]
我正在尝试使用unique
exam\u name
获取一个结果,这样生成的对象数组将保持unique
exam\u name
值。如果
exam\u name
至少有1个
isNew
键为true,则生成的对象应该具有
isNew
true
的属性,如果不是
false
。 预期结果-

"datawithisNew": [
        {
            "exam_name": "MPSC",
            "isNew": true
        },

        {
            "exam_name": "UPSC",
            "isNew": false
        },
        {
            "exam_name": "RAILWAY",
            "isNew": false
        }]
我使用的代码是-

 var helper1 = {};
    var result2 = data12.reduce(function(r, o) {
    var key = o.exam_name ;
    
    if(!helper1[key]) {
      helper1[key] = Object.assign({}, o); // create a copy of o
      r.push(helper1[key]);
    } else {
      helper1[key].exam_name_rating += o.exam_name_rating;
    }
    return r;
  }, []);

但这只需返回唯一的
exami\u name
对象,如果它至少出现一次
true
,则我还需要
isNew
键,因为
exami\u name
它应该将
isNew:true
作为true,否则
isNew:false

使用JS
数组。过滤
以过滤掉重复项

const datawithisNew=[{
“考试名称”:“MPSC”,
“isNew”:错误
},
{
“考试名称”:“MPSC”,
“isNew”:正确
},
{
“考试名称”:“UPSC”,
“isNew”:错误
},
{
“考试名称”:“铁路”,
“isNew”:错误
},
{
“考试名称”:“铁路”,
“isNew”:错误
}
];
const uniqueItems=datawithisNew.filter((检查、索引、自我)=>{
返回self.findIndex(e=>exam.exam\u name==e.exam\u name)==index
}).map(考试=>{
如果(!example.isNew&&datawithisNew.find(e=>e.example\u name===考试.example name&&e.isNew)){
exam.isNew=true;
}
复试;
});

控制台日志(唯一项)使用datawithisNew作为参数调用下面的函数

     function getUniqueExams(data){
let finalObjMap = { };
for(var i=0;i<data.length;i++){
let currentObj = data[i];
if(finalObjMap[currentObj["exam_name"]])
{
if(!finalObjMap[currentObj["isNew"]] && currentObj["isNew"])
    finalObjMap[currentObj["exam_name"]]["isNew"]=true;
}
else
{
    finalObjMap[currentObj["exam_name"]]={"isNew":currentObj["isNew"]};
}

}
let finalData=[];
Object.keys(finalObjMap).forEach((key)=>{
let tempExamObj  = { "exam_name": key , "isNew": finalObjMap[key]["isNew"]};
finalData.push(tempExamObj);

});
return finalData;
};

    var datawithisNew=[
            {
                "exam_name": "MPSC",
                "isNew": false
            },
            
            {
                "exam_name": "MPSC",
                "isNew": true
            },
            {
                "exam_name": "UPSC",
                "isNew": false
            },
          
            {
                "exam_name": "RAILWAY",
                "isNew": false
            },
            {
                "exam_name": "RAILWAY",
                "isNew": false
            }];
    console.log(getUniqueExams(datawithisNew));
函数getUniqueExams(数据){ 设finalObjMap={}; 对于(var i=0;i{ 让tempExamObj={“考试名称”:key,“isNew”:finalObjMap[key][“isNew”]}; 最终数据推送(tempExamObj); }); 返回最终数据; }; var datawithisNew=[ { “考试名称”:“MPSC”, “isNew”:错误 }, { “考试名称”:“MPSC”, “isNew”:正确 }, { “考试名称”:“UPSC”, “isNew”:错误 }, { “考试名称”:“铁路”, “isNew”:错误 }, { “考试名称”:“铁路”, “isNew”:错误 }]; log(getUniqueExams(datawithisNew));
在离实际解决方案不远的地方,添加下面的行可以解决您的问题:

helper1[key].isNew ||= o.isNew;
如果当前值为falsy,则
| |=
将为值分配变量或属性

如果由于(
| |=
)运算符是一个全新的赋值运算符而无法使用,则可以使用:

if (!helper1[key].isNew) helper1[key].isNew = o.isNew;
const data12=[
{“考试名称”:“MPSC”,“isNew”:false},
{“考试名称”:“MPSC”,“isNew”:true},
{“考试名称”:“UPSC”,“isNew”:false},
{“考试名称”:“铁路”,“isNew”:false},
{“考试名称”:“铁路”,“isNew”:false},
];
var helper1={};
var result2=data12.reduce(函数(r,o){
var key=o.exam\u name;
如果(!helper1[键]){
helper1[key]=Object.assign({},o);//创建o的副本
r、 按(助手1[键]);
}否则{
helper1[key]。考试名称评分+=o。考试名称评分;

助手1[键].isNew | |=o.isNew;//请分享您的代码,以及您在尝试解决它时遇到的问题是的,我更新了问题它适用于唯一的考试名称键我还需要第二个键isNew,如果它至少存在一次,或者作为false@pse现在运行,它将为您提供唯一的键,如果如果我们交换对象的索引,则考试的y是正确的。例如:当第一名为0,第0名为1时,您是对的,编辑了文章,请立即尝试。感谢您的更正:)此代码也有效,但很抱歉,我将接受另一个代码,因为它是几行代码,对我有效。但感谢您的时间是的,该属性在我的数据中也可用,并且您使我更容易将其添加到我正在使用的代码中。感谢此帮助检查以查看当前支持此运算符的引擎。C目前它不受Internet Explorer、Opera、Samsung Internet和Node.JS的支持。如果这是一个问题,请选择替代解决方案。如果您使用的是像这样的transpiler,您不必担心兼容性。运营商的工作方式与我使用的nodejs不同,但替代解决方案对我有效