如何对不同的数组进行变换或排序?

时间:2018-10-29 16:14:38

标签: javascript arrays

const r = ['a', 'b', 'c', 'l', 'p'];

const arr = [{
        name: "ss3",
        id: 'c'
    }, {
        name: "ss2",
        id: 'b'
    }, {
        name: "ss4",
        id: 'p'
    }, {
        name: "ss1",
        id: 'a'
    }]

var newArray =arr.map((i)=>{
  let e = r[i];

  if(i.id===e){
    return i
  }
})

console.log(newArray)

预期产量

const arr = [{
        name: "ss1",
        id: 'a'
    }, {
        name: "ss2",
        id: 'b'
    }, {
        name: "ss3",
        id: 'c'
    }, {
        name: "ss4",
        id: 'p'
    }
]

给出两个数组rarr,我希望针对arrr进行排序,即按 id 的字母顺序。

https://jsbin.com/yitijiboso/edit?html,js,output

3 个答案:

答案 0 :(得分:0)

我认为这可能是实现所需输出的一种简洁(尽管效果不是很好)方式:

const arr1 = ['a', 'b', 'c', 'l', 'p'];
const arr2 = [
    {
        name: "ss3",
        id: 'c'
    },
    {
        name: "ss2",
        id: 'b'
    }, {
        name: "ss4",
        id: 'p'
    },
    {
        name: "ss1",
        id: 'a'
    }
];

arr2.sort((a, b) => arr1.indexOf(a.id) - arr1.indexOf(b.id));
console.log(arr2);

答案 1 :(得分:0)

简单:

  1. 通过主“ arr”键制作地图通过“ id” https://www.npmjs.com/package/lodash.keyby
  2. 在“ r”之间循环,如果新映射中存在键,则获取值并推入新数组

    const arrMap = _.keyBy(arr, 'id');
    let newR = [];
    r.forEach( key => {
       if ( arrMap[key] ) {
          newR.push( arrMap[key] );
       }
    } );
    console.log( 'new array', newR );
    

答案 2 :(得分:0)

从@Petr Broz得到一个线索,这是我的建议:

const r = ['a', 'b', 'c', 'l', 'p'];
const arr = [
    {
        name: "ss3",
        id: 'c'
    },
    {
        name: "ss2",
        id: 'b'
    }, {
        name: "ss4",
        id: 'p'
    },
    {
        name: "ss1",
        id: 'a'
    }
];

arr.sort((a, b) => r.indexOf(a.id) > r.indexOf(b.id));
console.log(arr);

主要区别在于此代码利用了OP命名的数组,并使用了大于比较符。但是,如果只想按字母顺序对数组arr进行排序,则无需将其与数组r进行比较:

            const arr = [
                {
                    name: "ss3",
                    id: 'c'
                },
                {
                    name: "ss2",
                    id: 'b'
                }, {
                    name: "ss4",
                    id: 'p'
                },
                {
                    name: "ss1",
                    id: 'a'
                }
            ];

           arr.sort(function(a, b) 
           {
             
             if (a.id > b.id) {
                   return 1;
             }
             else
             if (a.id < b.id) {
                    return -1;
             
             }
             else
             {
                return 0;
             } 
           });

           console.log(arr);

请注意,在此示例中,返回值是数字值而不是布尔值,如果要排序的数组具有重复值,这将很有帮助。