IE 11 में यह एरो फंक्शन काम क्यों नहीं करता है?


84

IE 11 में कोड का टुकड़ा काम नहीं करता है, यह कंसोल में एक सिंटैक्स त्रुटि फेंकता है

g.selectAll(".mainBars")
    .append("text")
    .attr("x", d => (d.part == "primary" ? -40 : 40))
    .attr("y", d => +6)
    .text(d => d.key)
    .attr("text-anchor", d => (d.part == "primary" ? "end" : "start"));

d3.jsविज़ुअलाइज़ेशन के लिए द्विदलीय चार्ट का उपयोग करना

यह कोड उपरोक्त कथन में समस्या का कारण है d=>(d.part=="primary"? -40: 40)


20
IE11 अनाम फ़ंक्शंस के लिए तीर संकेतन का समर्थन नहीं करता है। इसे फिर से लिखें function (d) { return d.part == "primary" ? -40 : 40; }
Phylogenesis

1
@Phylogenesis: सभी एरो फ़ंक्शंस अनाम नहीं हैं। यह एक नहीं है, उदाहरण के लिए:var f = () => "foo";
टीजे क्राउडर


1
^ ^ ... या डॉक्स
तेमु

2
@ दाविद बालासिक आपका कोड गलत है। if (a=>0)हमेशा सच होता है। ऐसा इसलिए है क्योंकि आपने जो किया वह एक फ़ंक्शन था, न कि तुलना और कार्य सत्य हैं। if (a<=0)यह लिखने का सही तरीका होगा।
20:

जवाबों:


118

आप तीर के कार्यों का उपयोग कर रहे हैं। IE11 उनका समर्थन नहीं करता है। functionइसके बजाय कार्यों का उपयोग करें ।

यहाँ बाबेल का ES5 में अनुवाद है:

g.selectAll(".mainBars").append("text").attr("x", function (d) {
  return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
  return +6;
}).text(function (d) {
  return d.key;
}).attr("text-anchor", function (d) {
  return d.part == "primary" ? "end" : "start";
});

3
के बारे में मत भूलो this: var f = (a) => {a.some1(); this.some2();};सेvar f = function(a) {a.some1(); this.some2();}.bind(this);
user1742529

21

तीर कार्यों की बचें उपयोग आप IE 11 का समर्थन करने की आवश्यकता है के रूप में यह समर्थित नहीं है

उन लोगों को नियमित कार्यों में बदलें और आपका कोड आपकी अपेक्षा के अनुरूप काम करे

g.selectAll(".mainBars").append("text").attr("x",function(d) { 
  return d.part=="primary"? -40: 40;
}).attr("y",function(d){
  return +6;
}).text(function(d) { 
  return d.key;
}).attr("text-anchor", function(d) { 
  return d.part=="primary"? "end": "start";
});

17

सामान्य तौर पर, एरो फ़ंक्शंस में एरो फ़ंक्शंस होने से पहले, वे नियमित जेएस थे function। तो IE11 के साथ हमें बस समय पर एक कदम वापस लेना होगा

var fruits=["apple","banana","orange"];

var modernResult=fruits.find(e => e.includes("nana"));
console.log(modernResult);

var IEresult=fruits.find(function(e){return e.includes("nana")});
console.log(IEresult);


1
यह कोड प्रश्न में कोड के समान नहीं है (और "तीर के कार्यों का उपयोग न करें" कुछ भी नहीं कहता है कि हर दूसरे उत्तर ने पहले ही नहीं कहा है)
क्वेंटिन

10
यह सच है, हालांकि यह प्रश्न "एरो फ़ंक्शन आईई में काम नहीं कर रहा है" के लिए पहला खोज परिणाम है और मैंने एक सरल और कम विशिष्ट (अधिक सामान्य) स्पष्टीकरण दिया। लेकिन मैं समझता हूं कि यह नियम, माफी के खिलाफ है।
सजल लाजोस

1

IE अब के रूप में तीर संकेतन का समर्थन नहीं करता है, लेकिन काम करने के लिए अपने ES6कोड को ट्रांसप्लीन करने के लिए एक आसान और तेज़ तरीका ES5.1है IEबाबेल वेबसाइट पर जाएँ और फिर अपने कोड को बाएँ बॉक्स में चिपकाएँ और दाएँ बॉक्स कोड को कॉपी करें जो पहले के संस्करण में ट्रांसप्लड है JavaScript

उदाहरण के लिए, आपके कोड को ट्रांसप्लड किया गया है:

"use strict";

g.selectAll(".mainBars").append("text").attr("x", function (d) {
   return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
   return +6;
}).text(function (d) {
   return d.key;
}).attr("text-anchor", function (d) {
   return d.part == "primary" ? "end" : "start";
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.