Пытаюсь отсортировать массив объектов по одному из полей используя функцию localeCompare

Я имею компонент App, в котором есть классический список дел и сортировка через выпадающий список. Когда я в компоненте MySelect выбираю параметры сравнения срабатывает функция sortPosts, которая сортирует массив объектов posts. Так как сравнивать приходится строки я использовал функцию localeCompae. И у меня возникает ошибка TypeError: a[sort].localeСompare is not a function

Компонент App

import './styles/App.css'
import PostList from './components/PostList'
import PostForm from "./components/PostForm"
import MySelect from './components/UI/select/MySelect'

function App() {
  const [posts, setPosts] = useState([
    { id: 1, title: 'аа', body: 'вв' },
    { id: 2, title: 'гг', body: 'ее' },
    { id: 3, title: 'бб', body: 'сс' }
  ])

  const [selectedSort, setSelectedSort] = useState('')

  const createPost = (newPost) => {
    setPosts([...posts, newPost])
  }

  const removepost = (post) => {
    setPosts(posts.filter(p => p.id !== post.id))
  }

  const sortPosts = (sort) => {
    setSelectedSort(sort)
    // console.log([...posts].map(item => console.log(typeof(item[sort]))))
    setPosts([...posts].sort((a,b) => a[sort].localeСompare(b[sort])))
  }

  return (
    <div className="App">
      <PostForm create={createPost} />
      <hr style={{ margin: "15px 0" }} />
      <div>
        <MySelect
          value={selectedSort}
          onChange={sortPosts}
          defaultValue='Сортировка по'
          options={[
            { value: 'title', name: 'По названию' },
            { value: 'body', name: 'По описанию' }
          ]}
        />
      </div>

      {posts.length
        ?
        <PostList remove={removepost} posts={posts} title='Посты про JS' />
        :
        <h1 style={{ textAlign: "center" }}>Посты не найдены</h1>
      }
    </div>
  );
}

export default App

Компонент Myselect

import React from 'react'

const MySelect = ({options, defaultValue, value, onChange}) => {
    return (
        <select 
        value={value}
        onChange={event => onChange(event.target.value)}
        >
            <option disabled value="">{defaultValue}</option>
            {options.map(option => 
                <option key={option.value} value={option.value}>
                    {option.name}
                </option>
            )}
        </select>
    )
}
export default MySelect

Ответы (1 шт):

Автор решения: user483692

setPosts([...posts].sort((a,b) => a[sort].localeCompare(b[sort]))) У меня была ошибка в том, что я не указал скобку открывающую перед (a,b) Поэтому пишите правильно

→ Ссылка