javascript - w3schools - weschool html



سكل ستايل الانضمام إلى بيانات جسون (2)

ليس هناك طريقة مباشرة ولكن يمكنك كتابة منطق للحصول على كائن مجتمعة من هذا القبيل. منذ "التفاح والأحمر والموز ...." هم جميعا سلسلة يجب أن تكون ملفوفة في اقتباس واحد أو مزدوج.

إذا كان يمكنك مطابقة مصفوفة التكوين كولورس و فرويتس من خلال إضافة قيم خالية للعناصر المفقودة، يمكنك استخدام هذا النهج.

وروكينغ التجريبي

var colors = {"COLORS":[[1,'red'],[2,'yellow'],[3,'orange']]}

var fruits = {"FRUITS":[[1,'apple'],[2,'banana'],[3,'orange']]}

var newFruits = {"NEW_FRUITS": [] }

//Just to make sure both the arrays are of same size, otherwise the logic will break
if(colors.COLORS.length == fruits.FRUITS.length){
    var temp;
    $.each(fruits.FRUITS, function(i){
        temp = this;
        temp.push(colors.COLORS[i][2]);
        newFruits.NEW_FRUITS.push(temp);
    });
}

إذا كان يمكنك إنشاء colors fruits تكوينات كصفيف من الكائنات بدلا من مجموعة من الصفيف يمكنك أن تجرب هذا الحل الذي لا يهتمون تسلسل العناصر ولكن لا يزال حجم صفيف يجب أن تتطابق

العمل التجريبي

var colors = {"COLORS":[ {"1": 'red'}, { "2": 'yellow'}, {"3":'orange'}]}

var fruits = {"FRUITS":[ {"1":'apple'}, { "2": 'banana'}, {"3":'orange'}]}

var newFruits = {"NEW_FRUITS": [] }

if(colors.COLORS.length == fruits.FRUITS.length){
    var temp, first;
    $.each(fruits.FRUITS, function(i){
        for(first in this)break;
        temp = {};
        temp[first] = [];
        temp[first].push(this[first]);
        temp[first].push(colors.COLORS[i][first]);
        newFruits.NEW_FRUITS.push(temp);
    });
}

https://src-bin.com

هل هناك أي طريقة فعالة للانضمام إلى بيانات جسون؟ لنفترض أن لدينا مجموعتان من مجموعات جسون:

{"COLORS":[[1,red],[2,yellow],[3,orange]]}

{"FRUITS":[[1,apple],[2,banana],[3,orange]]}

وأريد تحويل هذا إلى جانب العميل التالي:

{"NEW_FRUITS":[[1,apple,red],[2,banana,yellow],[3,orange,orange]]}

نضع في اعتبارنا سيكون هناك الآلاف من السجلات هنا مع هياكل البيانات أكثر تعقيدا بكثير. جكري و جافاسكريبت الفانيليا على حد سواء غرامة. نضع في اعتبارنا أيضا أنه قد يكون هناك ألوان دون الفواكه والفواكه دون ألوان.

ملاحظة: من أجل البساطة، دعونا نقول أن مجموعتي البيانات على حد سواء في نفس الترتيب، ولكن مجموعة البيانات الثانية قد يكون الثغرات.


Answer #1

مكتبة الأسكل جافا سكريبت سكل بالضبط ما تحتاجه في سطر واحد:

 <script src="alasql.min.js"></script>
 <script>
    var data = { COLORS: [[1,"red"],[2,"yellow"],[3,"orange"]],            
                 FRUITS: [[1,"apple"],[2,"banana"],[3,"orange"]]};

    data.NEW_FRUITS = alasql('SELECT MATRIX COLORS.[0], COLORS.[1], FRUITS.[1] AS [2] \
         FROM ? AS COLORS JOIN ? AS FRUITS ON COLORS.[0] = FRUITS.[0]',
         [data.COLORS, data.FRUITS]);
 </script>

يمكنك أن تلعب مع هذا المثال في جسفيدل.

هذا هو تعبير سكل، حيث:

  • سيليكت - حدد عامل التشغيل
  • ماتريكس - معدل، وسي تحويل النتائج من صفيف من الكائنات إلى مجموعة من المصفوفات
  • ألوان. [0] - العمود الأول من مجموعة الألوان، إلخ.
  • الفاكهة. 1 أس 2 - سيتم تخزين العمود الثاني من فرويتس صفيف كعمود ثالث في مجموعة السجلات الناتجة
  • من عند ؟ أس كولورس - صفيف البيانات من المعلمات المسماة الألوان في جملة سكل
  • انضم ؟ أون ... - الانضمام
  • [data.COLORS، data.FRUITS] - المعلمات مع صفائف البيانات




join