Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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 如何解决Array.sort无法分配给对象的只读属性“0”的问题_Javascript_Reactjs - Fatal编程技术网

Javascript 如何解决Array.sort无法分配给对象的只读属性“0”的问题

Javascript 如何解决Array.sort无法分配给对象的只读属性“0”的问题,javascript,reactjs,Javascript,Reactjs,在我的React应用程序中,排序功能出现错误 未捕获的TypeError:无法分配给对象“[object Array]”的只读属性“0” 我不知道问题是什么,功能是: const preparedSites = useMemo( () => sites .sort(sortSiteSelection(site)) .map(elm => { const arr = [

在我的React应用程序中,排序功能出现错误

未捕获的TypeError:无法分配给对象“[object Array]”的只读属性“0”

我不知道问题是什么,功能是:

const preparedSites = useMemo(
      () =>
        sites
          .sort(sortSiteSelection(site))
          .map(elm => {
            const arr = [
              elm.siteId,
              elm.city,
              elm.state,
              elm.country,
              elm.address,
              elm.status,
            ];
            if (nearestSites.length)
              arr.push(
                nearestSites.find(s => s.closestSiteId === elm.siteId).distance,
              );
            return arr;
          })
          .sort((a, b) => a[6] - b[6]),
      [sites, site, nearestSites],
    );
.sort部分和“sortSiteSelection”上发生的错误如下

const nameCompare = (x, y) => x.name.localeCompare(y.name);
const cityCompare = (x, y) => x.city.localeCompare(y.city);
const compareCountry = s => (x, y) => {
  if (!s) return 0;

  if (x.countryCode === s.countryCode && y.countryCode === s.countryCode)
    return 0;
  else if (x.countryCode === s.countryCode) return -1;
  else if (y.countryCode === s.countryCode) return 1;
  else return x.countryCode.localeCompare(y.countryCode);
};

export const sortSiteSelection = selectedSite => {
  if (!selectedSite) {
    console.log('NULL FROM SORT SITE');
    return () => 0;
  }
  pipeSort(compareCountry(selectedSite), nameCompare, cityCompare);
};
网站的OBJ是公正的

{
 siteId,
 city,
 elm.state,
 country,
 address,
 status,

}

我会说这是因为数组处于严格模式。您应该创建此阵列的副本。这有多种方法

[...sites].sort(sortSiteSelection(site))


我希望这能解决您面临的问题

我尝试了两种方法,但仍然存在此问题未捕获TypeError:无法分配给数组中对象“[object Array]”的只读属性“0”。排序错误以某种方式得到修复,在使用其他排序的不同位置是一个错误,添加此选项可修复此问题
sites.slice().sort(sortSiteSelection(site))