1

I'm trying to sort an array of strings based on an array of objects. (The array will not have the same amount of items the object has.)

Here's the code:

const myObject = [ { title: 'Some string' }, { title: 'another string' }, { title: 'Cool one' } ]; const array = ['Cool one', 'Some string']; // Sort this array based on 'myObject' 
1
  • 1
    based on what criteria on array of objects you want to sort. Question is not very clear thoughCommentedOct 10, 2019 at 4:02

3 Answers 3

3

You can generate a table of indices by which to sort your array like this:

const myObject = [ { title: 'Some string' }, { title: 'another string' }, { title: 'Cool one' } ]; const indices = Object.fromEntries( myObject.map( ({ title }, index) => [title, index] ) ); const array = ['Cool one', 'Some string']; array.sort((a, b) => indices[a] - indices[b]); console.log(array);

0
    2

    You can use reduce & findIndex. Inside reduce callback function use findIndex to check if the element exist in myObject. If so then get the index and using this add the value in accumulator array

    const myObject = [{ title: 'Some string' }, { title: 'another string' }, { title: 'Cool one' } ]; const array = ['Cool one', 'Some string']; let newArray = array.reduce(function(acc, curr) { let findIndex = myObject.findIndex(a => a.title.toLowerCase().trim() == curr.toLowerCase().trim()); if (findIndex !== -1) { acc.push(myObject[findIndex]) } return acc; }, []); console.log(newArray)

    1
    • I'm trying to sort the array based on the object.
      – Jessica
      CommentedOct 10, 2019 at 4:37
    0

    I think you can use Array.findIndex() to help you out on this one, in conjunction with Array.sort()

    const objectArray = [ { title: 'Some string' }, { title: 'another string' }, { title: 'Cool one' } ] const stringArray = [ 'Cool one', 'Some string' ] const sortFromObject = (a, b) => { // get the indexes of the objects const idxA = objectArray .findIndex(obj => obj.title === a) const idxB = objectArray .findIndex(obj => obj.title === b) // if it comes first in the object array, // sort this item up, else sort it down return idxA - idxB } stringArray.sort(sortFromObject) 
    1
    • That's right, I always forget sort expects just a positive or negative, not necessarily 1.
      – user1971419
      CommentedOct 10, 2019 at 4:29

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.