Javascript 如何比较两个数组项并替换,以及如何移动到特定位置

Javascript 如何比较两个数组项并替换,以及如何移动到特定位置,javascript,arrays,Javascript,Arrays,以下是包含类型、代码和说明的employee数组的代码。 还有另一个名为days的数组,它包含不同的时间段 我需要和员工比较一下天数 如果天[0]==employeeArr[0].codeDescription,则不要移动,如果是!==然后它将替换。 所以,如果这里的天数[1]是每周的,那么employeeArr[4]。代码描述移动到第一个位置。 如果第[3]天是四分之一天,则员工到达[1]。代码描述移动到第三个位置 let employeeArr=[ {“empType”:“da”,“emp

以下是包含类型、代码和说明的employee数组的代码。 还有另一个名为days的数组,它包含不同的时间段

我需要和员工比较一下天数

如果
天[0]==employeeArr[0].codeDescription
,则不要移动,如果是!==然后它将替换。 所以,如果这里的天数[1]是每周的,那么employeeArr[4]。代码描述移动到第一个位置。 如果第[3]天是四分之一天,则员工到达[1]。代码描述移动到第三个位置

let employeeArr=[
{“empType”:“da”,“empCode”:“1”,“codeDescription”:“Daily”},
{“empType”:“hy”,“empCode”:“6”,“codeDescription”:“季刊”},
{“empType”:“mo”,“empCode”:“4”,“codeDescription”:“Monthly”},
{“empType”:“qu”,“empCode”:“5”,“codeDescription”:“半年”},
{“empType”:“wl”,“empCode”:“2”,“codeDescription”:“Weekly”},
]
设天数=[“每日”、“每周”、“每月”、“四分之一”、“半年”]
let employeeArr=[
{“empType”:“da”,“empCode”:“1”,“codeDescription”:“Daily”},
{“empType”:“hy”,“empCode”:“6”,“codeDescription”:“季刊”},
{“empType”:“mo”,“empCode”:“4”,“codeDescription”:“Monthly”},
{“empType”:“qu”,“empCode”:“5”,“codeDescription”:“半年”},
{“empType”:“wl”,“empCode”:“2”,“codeDescription”:“Weekly”},
]
设天数=[“每日”、“每周”、“每月”、“季度”、“半年”];
让ModeEmployee=[]
varⅠ,j;
对于(i=0;iconsole.log(modeemployee)您可以创建这样的比较函数

const比较器=(emp1,emp2)=>{
施工天数=[“每日”、“每周”、“每月”、“季度”、“半年”];
返回天数.indexOf(emp1.codeDescription)-天数.indexOf(emp2.codeDescription);
};
然后使用它对
employeeArr

employeeArr.sort(比较器);

您可以通过与员工一起绘制天数地图来获得结果

let employeeMap =employeeArr.reduce((rs,el) => {let currentKey = el['codeDescription']; let currentObj = {}; currentObj[currentKey.toString()]=el;return Object.assign(rs, currentObj)}, {})
var result = days.map(el =>employeeMap[el])

console.log(result)
您可以使用HashMap在O(n)中实现这一点

   Map<String,Integer> map = new HashMap<>();

        //Iterate employee array and store the description as key and index as value in map
        for(int i=0;i<employeeArr.length;i++)
        {
            Employee e =  employeeArr[i];
            map.put(e.description,i);
        }

        //Iterate days array, find the corresponding position in map, swao the indexing position in map and swap the values in Employee array if it is not in expected order
        for(int j=0;j<days.length;j++)
        {
            int index = map.get(days[j]);
            if(index == j)
            {
                continue;
            }
            Employee temp = employeeArr[index];
            employeeArr[index] = employeeArr[j];
            employeeArr[j] = temp;
            map.put(employeeArr[index].description, index);
            map.put(employeeArr[j].description, j);
        }


Map Map=newhashmap();
//迭代employee数组,并将描述作为键和索引作为值存储在map中

对于(int i=0;我在最后两个对象上的输出是否有误?请检查并让我知道第三个索引我没有定义,第四个索引我有第三个。谢谢。我猜您这里有一个拼写错误
let days=[“Daily”、“Weekly”、“Monthly”、“quartly”、“半年”];
应该是
let days=[“Daily”、“Weekly”、“Monthly”,“季度”,“半年”];
还有一个问题,employeeArr是动态的,在某些情况下,employeeArr只包含3个对象,在这种情况下,我没有定义。是的,所以您只需从结果中删除未定义的元素,就可以得到有序数组