আমার JSON.stringify ফলাফলে ON হ্যাশকি কী যুক্ত হয়েছে


288

আমি তাদের ডক্সের মোজিলা জেএসএন স্ট্রিংফাই পৃষ্ঠাটি পাশাপাশি এখানে এসও এবং গুগলে দেখার চেষ্টা করেছি কিন্তু কোনও ব্যাখ্যা পাই নি। আমি JSOn স্ট্রিংফাইটি অনেকবার ব্যবহার করেছি তবে এই ফলাফলটি কখনই আসে না

আমার কাছে JSON অবজেক্টের একটি অ্যারে রয়েছে

[
    {
        "param_2": "Description 1",
        "param_0": "Name 1",
        "param_1": "VERSION 1"
    },
    {
        "param_2": "Description 2",
        "param_0": "Name 2",
        "param_1": "VERSION 2"
    },
    {
        "param_2": "Description 3",
        "param_0": "Name 3",
        "param_1": "VERSION 3"
    }
]

আমার সাথে সংযুক্ত $scopeএবং POSTতাদের সাথে একটি পরামিতি হিসাবে আমি JSON.stringify () পদ্ধতি ব্যবহার করেছি এবং আমি নিম্নলিখিতটি পেয়েছি:

   [
        {
            "param_2": "Description 1",
            "param_0": "Name 1",
            "param_1": "VERSION 1",
            "$$hashKey": "005"
        },
        {
            "param_2": "Description 2",
            "param_0": "Name 2",
            "param_1": "VERSION 2",
            "$$hashKey": "006"
        },
        {
            "param_2": "Description 3",
            "param_0": "Name 3",
            "param_1": "VERSION 3",
            "$$hashKey": "007"
        }
    ]

আমি স্ট্রিংফাই পদ্ধতি থেকে নীচের সাথে আরও কিছু অনুরূপ প্রত্যাশা করায় just হ্যাশকিটি ঠিক কী তা আমি কেবল কৌতূহলী:

[
    {
        "1":{
            "param_2": "Description 1",
            "param_0": "Name 1",
            "param_1": "VERSION 1"
        },
         "2":{
            "param_2": "Description 2",
            "param_0": "Name 2",
            "param_1": "VERSION 2"
        },
         "3":{
            "param_2": "Description 3",
            "param_0": "Name 3",
            "param_1": "VERSION 3"
        }
    }
]

আমি নিশ্চিত যে এটি একটি ফ্যাক্টর কিনা তবে আমি ব্যবহার করছি Angularjs 1.1.5, JQuery 1.8.2 and Spring 3.0.4 and Spring security 3.0.7 on the Server side

এটি আমার কোনও সমস্যার কারণ নয় তবে আমি এর কারণ এবং কারণ জানতে চাই $$hashkey


8
এটি অ্যাঙ্গুলারজ যুক্ত করেছে
অরুণ পি জনি


69
JSON.stringify এর পরিবর্তে Angular.toJson ()
অরুণ পি জনি

ধন্যবাদ গাইস, যদি কেউ উত্তর হিসাবে আপনার ব্যাখ্যা যোগ করতে চায় তবে আমি তা গ্রহণ করতে পেরে খুশি
হব

1
এই উত্তরটি একটি দুর্দান্ত ব্যাখ্যা .. স্ট্যাকওভারফ্লো
চার্লি মার্টিন

উত্তর:


530

কৌনিক আপনার পরিবর্তনগুলি নজর রাখার জন্য এটি যুক্ত করে, তাই এটি কখন ডম আপডেট করার প্রয়োজন তা জানে।

আপনি যদি এর angular.toJson(obj)পরিবর্তে ব্যবহার করেন JSON.stringify(obj)তবে কৌনিক আপনার জন্য এই অভ্যন্তরীণ-ব্যবহারের মানগুলি সরিয়ে ফেলবে।

এছাড়াও, যদি আপনি track by {uniqueProperty}প্রত্যয়টি ব্যবহার করতে আপনার পুনরাবৃত্তি প্রকাশটি পরিবর্তন করেন তবে কৌণিকটিকে মোটেও যুক্ত করতে হবে না $$hashKey। উদাহরণ স্বরূপ

<ul>
    <li ng-repeat="link in navLinks track by link.href">
        <a ng-href="link.href">{{link.title}}</a>
    </li>
</ul>

কেবল সর্বদা মনে রাখবেন আপনার "লিঙ্ক" দরকার। ভাবের অংশ - আমি সর্বদা এটি ভুলে যাওয়ার প্রবণতা রাখি। শুধু track by hrefঅবশ্যই কাজ করবে না।


»বনাম« h হ্যাশকি »দ্বারা« ট্র্যাক সম্পর্কে কোনও পারফরম্যান্স পরীক্ষা আছে? (ইউপিডি। ঠিক আছে, আমি এটি
গুগল

@ আর্টুস্কা আইডি দ্বারা ট্র্যাকিং খুব সোজা সহজ কারণ কোনও হ্যাশ গণনা করতে হবে না আপনি কেবল বিদ্যমান আইডিকে পুনরায় ব্যবহার করতে পারেন বা একটি কাউন্টার বাড়িয়ে তোলেন ...
ক্রিস্টোফ রউসি

3
এবং যদি আপনার প্রয়োগ করার জন্য একটি ফিল্টার থাকে তবে এখানে সঠিক ক্রমটি রয়েছে: item in somelist | filter:somefilter track by item.keyলাইনের শেষে ফিল্টারটি লিখবেন না!
লুইন

1
বিঃদ্রঃ! আমি একটি ক্লোন পদ্ধতি সহ একটি অ্যারে ব্যবহার করছিলাম যা এরপরে উপাদানগুলিকে একটি অ্যারেতে অনুলিপি করা হয়েছিল, যা পরে এনজি-পুনরাবৃত্তি দ্বারা রেন্ডার হয়েছিল। আমার উপাদানটি ক্লোন করতে JSON.parse (JSON.stringify (obj)) ব্যবহার করার সময় আমি কৌনিক 'ডুপ্লিকেট কী' ত্রুটিগুলি পেয়েছিলাম। JSON.parse (অ্যাঙ্গুলার.টোজসন (অবজেক্ট)) ব্যবহার করে; স্থির জিনিস। ধন্যবাদ!
স্যাল

1
ডাবল কোলন :: ব্যবহার করে ওয়ান টাইম বাইন্ডিং বৈশিষ্ট্যটিও ব্যবহার করতে পারেন :: যদি আপনি কেবল ডেটা প্রদর্শন করেন তবে আপডেট হওয়া থেকে বিরত রাখতে। <a ng-href="link.href"> {{:: link.title}} </a>
phil

70

আমার ব্যবহারের ক্ষেত্রে (এক্স 2 জেএসকে ফলস্বরূপ বস্তুকে খাওয়ানো) প্রস্তাবিত পদ্ধতির

data = angular.toJson(source);

$$hashKeyবৈশিষ্ট্যগুলি অপসারণ করতে সহায়তা করে, তবে ফলাফলটি আর X2JS দ্বারা প্রক্রিয়া করতে পারে না ।

data = angular.copy(source);

$$hashKeyবৈশিষ্ট্যগুলি পাশাপাশি মুছে ফেলা হয়েছে , তবে ফলাফলটি এক্স 2 জেএসের পরামিতি হিসাবে ব্যবহারের জন্য রয়ে গেছে।


37

এটি সাধারণত এনজি-রিপিট ডাইরেক্টিভ সহ আসে। ডোম ম্যানিপুলেশন করতে AngularJS বিশেষ আইডি সহ বস্তুগুলিকে ফ্ল্যাগ করে।

এটি কৌণিকর ক্ষেত্রে সাধারণ। উদাহরণস্বরূপ যদি আপনি এনজিআর রিসোর্স দিয়ে অবজেক্ট পান তবে আপনার অবজেক্টটি সমস্ত রিসোর্স এপিআই এম্বেড করবে এবং আপনি $ সেভ ইত্যাদির মতো পদ্ধতিগুলি দেখতে পাবেন cookies


আমি এই বৈশিষ্ট্যগুলি কীভাবে সরিয়ে ফেলব? কৌণিক এটি করতে কোনও উপায় সরবরাহ করে?
নিলেশ

1
কৌনিক মডেলগুলি ভেঙে যাবে যদি আপনি সেই সম্পত্তিটি সরিয়ে দেওয়ার চেষ্টা করেন, আমি ভেরিয়েবলটি অনুলিপি করার পরামর্শ দিই। কীভাবে হ্যাশকি ফিল্টার করবেন সে সম্পর্কে @ ডেভিড-বোইকের জবাব দেখুন
জোসে আলেকজান্ডার ইবাররা

23

আপনি যদি নিজের ডেটাতে আইডি যুক্ত করতে না চান তবে আপনি অ্যারেতে সূচকটি অনুসরণ করতে পারেন, যা আইটেমগুলিকে তাদের মানের পরিবর্তে অ্যারেতে অবস্থিত করে কীড করে দেবে।

এটার মত:

var myArray = [1,1,1,1,1];

<li ng-repeat="item in myArray track by $index">

এর জন্য অনুমান করা দরকার যে আপনার আইটেমগুলির ক্রম কখনই পরিবর্তন হবে না। :)
স্নাতকোডিং

8

আপনি যদি কৌনিক 1.3 বা ততোধিক ব্যবহার করে থাকেন তবে আমি প্রস্তাব দিচ্ছি যে আপনি আপনার এনজি-রিপিটে "ট্র্যাক বাই" ব্যবহার করুন। কৌনিক আপনার অ্যারেতে অবজেক্টগুলিতে "$$ হ্যাশকি" বৈশিষ্ট্য যুক্ত করে না যদি আপনি "ট্র্যাক বাই" ব্যবহার করেন। আপনি পারফরম্যান্স সুবিধাও পাবেন, যদি আপনার অ্যারেতে কিছু পরিবর্তন হয়, কৌণিক আপনার এনজি-রিপিটের জন্য পুরো ডোম কাঠামোটি পুনরায় তৈরি না করে, পরিবর্তে এটি আপনার অ্যারেতে থাকা মানগুলির জন্য ডোমের অংশটি পুনরায় তৈরি করে।


4

আপডেট: কৌণিক v1.5 থেকে, ট্র্যাক বাই $indexএখন লিঙ্কটি ব্যবহার করার পরিবর্তে এটি স্ট্যান্ডার্ড সিনট্যাক্স হিসাবে এটি আমাকে একটি ng-repeatদ্বৈত ত্রুটি দিয়েছে।

আমি নেস্টেড এর জন্য এটিতে ছুটেছি ng-repeatএবং নীচে কাজ করেছে।

<tbody>
    <tr ng-repeat="row in data track by $index">
    <td ng-repeat="field in headers track by $index">{{row[field.caption] }}</td>
</tr>

কেবল পরিষ্কার করতে - এক্সপ্রেশন দ্বারা ট্র্যাক ব্যবহৃত গুণাবলী পুনরাবৃত্তি সংগ্রহ জুড়ে অনন্য হতে হবে। $ সূচক একটি বিকল্প। বেশিরভাগ ক্ষেত্রে এটি পর্যাপ্ত, তবে কখনও কখনও আপনি অনন্য বৈশিষ্ট্য দ্বারা ট্র্যাক করতে দরকারী হতে পারেন ((আইডি, ...)
মার্টিন হেলাভিয়া

এর জন্য অনুমান করা দরকার যে আপনার আইটেমগুলির ক্রম কখনই পরিবর্তন হবে না। :)
স্নাতকোডিং

3

আপনি কীভাবে সহজেই অবজেক্ট থেকে K হ্যাশকে মুছে ফেলতে পারেন তা এখানে:

$scope.myNewObject = JSON.parse(angular.toJson($scope.myObject))

$scope.myObject - যে অবজেক্টটি আপনি অপারেশন করতে চান তা বোঝায় ie হ্যাশকে এখান থেকে সরান

$scope.myNewObject - পরিবর্তিত আসল অবজেক্টটিকে নতুন বস্তুকে বরাদ্দ করুন যাতে এটি প্রয়োজনীয় হিসাবে ব্যবহৃত হয়


আমি এটিকে অযথা জটিল মনে করি। আপনি কেবল সেই একক ক্ষেত্রটি - বা প্রতিটি ক্ষেত্র every দিয়ে শুরু করতে পারবেন $ তবে সম্ভবত আপনার প্রয়োজন নেই - অন্যান্য উত্তরগুলি দেখুন।
সেভসিক

1

https://www.timcosta.io/angular-js-object-comparisons/

কৌণিক হ'ল লোকেরা প্রথমবার এটি দেখায় ical আপনি যখন আপনার জেএসে কোনও ভেরিয়েবল আপডেট করেন তখন স্বয়ংক্রিয় ডিওএম আপডেট হয় এবং যখন কোনও ডিওমে এর মান আপডেট করে তখন একই ভেরিয়েবলটি আপনার জেএস ফাইলে আপডেট হয়। এই একই কার্যকারিতাটি পৃষ্ঠা উপাদানগুলিতে এবং নিয়ন্ত্রণকারীদের জুড়ে কাজ করে।

এই সকলের মূল কী হ'ল হ্যাশকি আঙ্গুলার এনজি-রিপিটে ব্যবহৃত বস্তু এবং অ্যারেগুলিতে সংযুক্ত।

এই h হ্যাশকি এমন ব্যক্তিদের জন্য প্রচুর বিভ্রান্তির কারণ তৈরি করে যারা অতিরিক্ত ডেটা না কেটে এমন একটি এপিআইতে পূর্ণ বস্তু প্রেরণ করে। আপনার সমস্ত অনুরোধের জন্য এপিআই 400 ফিরিয়ে দেবে, তবে $$ হ্যাশকি কেবল আপনার অবজেক্ট থেকে দূরে যাবে না।

কৌণিকর কোনও এনজি-রিপিটের মাধ্যমে লুপ করা হচ্ছে এমন অ্যারেতে ডিওমে থাকা উপাদানগুলির মধ্যে কোন উপাদানটি কোন আইটেমের সাথে সম্পর্কিত তা ট্র্যাক রাখতে keep হ্যাশকি ব্যবহার করে। H হ্যাশকি ছাড়া কৌণিকের জাভা স্ক্রিপ্ট বা ডিওএম-তে ঘটে যাওয়া পরিবর্তনগুলি তাদের প্রতিরূপে প্রয়োগ করার কোনও উপায় নেই, যা কৌণিকর জন্য অন্যতম প্রধান ব্যবহার।

এই অ্যারে বিবেচনা করুন:

users = [  
    {
         first_name: "Tim"
         last_name: "Costa"
         email: "tjsail33@gmail.com"
    }
]

যদি আমরা এটিকে এনজি-রিপিট = "ব্যবহারকারীদের মধ্যে ব্যবহারকারী" ব্যবহার করে একটি তালিকাতে রেন্ডার করি তবে এর প্রতিটি বস্তু অ্যাঙ্গুলার থেকে ট্র্যাকিংয়ের উদ্দেশ্যে একটি $$ হ্যাশকি পাবে। এই avoid হ্যাশকি এড়াতে এখানে দুটি উপায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.