وظائف عنصر Bicep

توضح هذه المقالة وظائف Bicep للعمل مع الكائنات.

تحتوي على

contains(container, itemToFind)

للتحقق مما إذا كانت المصفوفة تحتوي على قيمة، أو أن العنصر يحتوي على مفتاح، أو سلسلة تحتوي على سلسلة فرعية. تكون مقارنة السلسلة حساسة لحالة الأحرف. ومع ذلك، عند اختبار ما إذا كان عنصر يحتوي على مفتاح، تكون المقارنة غير حساسة لحالة الأحرف.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
حاوية ‏‏نعم‬ صفيف أو عنصر أو سلسلة القيمة التي تحتوي على العنصر للبحث عنه.
البحث عن عنصر ‏‏نعم‬ سلسلة أو كثافة العمليات القيمة التي يتعين العثور عليها.

قيمة الإرجاع

صحيح إذا تم العثور على العنصر ؛ وإلا، خطأ .

مثال

يوضح المثال التالي كيفية الاستخدام contains مع أنواع مختلفة:

param stringToTest string = 'OneTwoThree'
param objectToTest object = {
  one: 'a'
  two: 'b'
  three: 'c'
}
param arrayToTest array = [
  'one'
  'two'
  'three'
]

output stringTrue bool = contains(stringToTest, 'e')
output stringFalse bool = contains(stringToTest, 'z')
output objectTrue bool = contains(objectToTest, 'one')
output objectFalse bool = contains(objectToTest, 'a')
output arrayTrue bool = contains(arrayToTest, 'three')
output arrayFalse bool = contains(arrayToTest, 'four')

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
stringTrue مجموعة صواب
stringFalse مجموعة خطأ
objectTrue مجموعة صواب
عنصر خطأ مجموعة خطأ
صفيف صحيح مجموعة صواب
صفيف خطأ مجموعة خطأ

فارغ

empty(itemToTest)

تحديد ما إذا كان صفيف أو كائن أو سلسلة فارغة أو خالية.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
itemToTest ‏‏نعم‬ صفيف أو عنصر أو سلسلة القيمة التي يجب التحقق منها إذا كانت فارغة أو خالية.

قيمة الإرجاع

إرجاع True إذا كانت القيمة فارغة أو خالية؛ وإلا، خطأ.

مثال

يتحقق المثال التالي ما إذا كان الصفيف والعنصر والسلسلة فارغة أو خالية.

param testArray array = []
param testObject object = {}
param testString string = ''
param testNullString string?

output arrayEmpty bool = empty(testArray)
output objectEmpty bool = empty(testObject)
output stringEmpty bool = empty(testString)
output stringNull bool = empty(testNullString)

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
arrayEmpty مجموعة صواب
عنصر فارغ مجموعة صواب
stringEmpty مجموعة صواب
stringNull مجموعة صواب

intersection

intersection(arg1, arg2, arg3, ...)

رجوع إلى مصفوفة واحدة أو كائناً مع عناصر مشتركة من المعلمات.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
arg1 ‏‏نعم‬ صفيف أو عنصر القيمة الأولى المستخدمة في العثور على العناصر الشائعة.
arg2 ‏‏نعم‬ صفيف أو عنصر القيمة الثانية المستخدمة في البحث عن العناصر الشائعة.
وسائط إضافية لا صفيف أو عنصر المزيد من القيم المستخدمة في العثور على العناصر الشائعة.

قيمة الإرجاع

مصفوفة أو كائن مع العناصر الشائعة.

مثال

يوضح المثال التالي كيفية استخدام intersection مع الصفائف والكائنات:

param firstObject object = {
  one: 'a'
  two: 'b'
  three: 'c'
}
param secondObject object = {
  one: 'a'
  two: 'z'
  three: 'c'
}
param firstArray array = [
  'one'
  'two'
  'three'
]
param secondArray array = [
  'two'
  'three'
]

output objectOutput object = intersection(firstObject, secondObject)
output arrayOutput array = intersection(firstArray, secondArray)

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
objectOutput ‏‏الكائن {"one": "a", "three": "c"}
arrayOutput صفيف ["اثنين، ثلاثة"]

العناصر

items(object)

تحويل كائن قاموس إلى مصفوفة. راجع toObject حول تحويل صفيف إلى كائن.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
كائن ‏‏نعم‬ كائن كائن القاموس لتحويله إلى مصفوفة.

قيمة الإرجاع

مصفوفة من الكائنات للقاموس المحول. يحتوي كل كائن في المصفوفة علي key خاصية تحتوي على قيمة مفتاح القاموس. يحتوي كل كائن أيضا على value خاصية تحتوي على خصائص الكائن.

مثال

يقوم المثال التالي بتحويل كائن قاموس إلى مصفوفة. لكل كائن في المصفوفة، فإنه ينشئ كائن جديد مع قيم معدلة.

var entities = {
  item002: {
    enabled: false
    displayName: 'Example item 2'
    number: 200
  }
  item001: {
    enabled: true
    displayName: 'Example item 1'
    number: 300
  }
}

var modifiedListOfEntities = [for entity in items(entities): {
  key: entity.key
  fullName: entity.value.displayName
  itemEnabled: entity.value.enabled
}]

output modifiedResult array = modifiedListOfEntities

المثال السابق يرجع:

"modifiedResult": {
  "type": "Array",
  "value": [
    {
      "fullName": "Example item 1",
      "itemEnabled": true,
      "key": "item001"
    },
    {
      "fullName": "Example item 2",
      "itemEnabled": false,
      "key": "item002"
    }
  ]
}

يوضح المثال التالي المصفوفة الذي يتم إرجاعه من دالة العناصر.

var entities = {
  item002: {
    enabled: false
    displayName: 'Example item 2'
    number: 200
  }
  item001: {
    enabled: true
    displayName: 'Example item 1'
    number: 300
  }
}

var entitiesArray = items(entities)

output itemsResult array = entitiesArray

المثال يرجع:

"itemsResult": {
  "type": "Array",
  "value": [
    {
      "key": "item001",
      "value": {
        "displayName": "Example item 1",
        "enabled": true,
        "number": 300
      }
    },
    {
      "key": "item002",
      "value": {
        "displayName": "Example item 2",
        "enabled": false,
        "number": 200
      }
    }
  ]
}

في JSON، العنصر هو مجموعة غير مرتبة من أزواج صفرية أو أكبر من المفاتيح/القيم. يمكن أن يكون الترتيب مختلفًا اعتمادًا على عمليات التنفيذ. على سبيل المثال، تقوم دالة Bicep items() بفرز العناصر بالترتيب الأبجدي. في أماكن أخرى، يمكن الاحتفاظ بالترتيب الأصلي. وبسبب هذا عدم الحتمية، تجنب وضع أي افتراضات حول ترتيب مفاتيح الكائنات عند كتابة التعليمات البرمجية، والتي تتفاعل مع معلمات التوزيع والمخرجات.

json

json(arg1)

يحول سلسلة JSON صالحة إلى نوع بيانات JSON.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
arg1 ‏‏نعم‬ سلسلة القيمة التي يجب تحويلها إلى JSON. يجب أن تكون السلسلة سلسلة JSON منسقة بشكل صحيح.

قيمة الإرجاع

نوع بيانات JSON من السلسلة المحددة، أو قيمة فارغة عند تحديد خالية.

الملاحظات

إذا كنت بحاجة إلى تضمين قيمة معلمة أو متغير في كائن JSON، فاستخدم الدالة concatلإنشاء السلسلة التي تمررها إلى الدالة.

مثال

يوضح المثال التالي كيفية استخدام الوظيفةjson. لاحظ أنه يمكنك تمرير فارغ لكائن فارغ.

param jsonEmptyObject string = 'null'
param jsonObject string = '{\'a\': \'b\'}'
param jsonString string = '\'test\''
param jsonBoolean string = 'true'
param jsonInt string = '3'
param jsonArray string = '[[1,2,3]]'
param concatValue string = 'demo value'

output emptyObjectOutput bool = empty(json(jsonEmptyObject))
output objectOutput object = json(jsonObject)
output stringOutput string =json(jsonString)
output booleanOutput bool = json(jsonBoolean)
output intOutput int = json(jsonInt)
output arrayOutput array = json(jsonArray)
output concatObjectOutput object = json(concat('{"a": "', concatValue, '"}'))

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
emptyObjectOutput Boolean صواب
objectOutput ‏‏الكائن {"a": "b"}
إخراج السلسلة السلسلة‬ اختبار
booleanOutput Boolean صواب
إخراج العدد الصحيح رقم صحيح 3
arrayOutput صفيف [ 1, 2, 3 ]
concatObjectOutput ‏‏الكائن { "a": "قيمة عرض توضيحي" }

طول

length(arg1)

تُرجع هذه الدالة عدد العناصر في مصفوفة، أو الأحرف في سلسلة، أو خصائص مستوى الجذر في كائن.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
arg1 ‏‏نعم‬ صفيف أو سلسلة أو عنصر الصفيف الذي سيتم استخدامه للحصول على عدد العناصر أو السلسلة التي سيتم استخدامها للحصول على عدد الأحرف أو العنصر الذي سيتم استخدامه للحصول على عدد خصائص مستوى الجذر.

قيمة الإرجاع

عدد صحيح

مثال

يوضح المثال التالي كيفية استخدام length مع صفيف وسلسلة:

param arrayToTest array = [
  'one'
  'two'
  'three'
]
param stringToTest string = 'One Two Three'
param objectToTest object = {
  propA: 'one'
  propB: 'two'
  propC: 'three'
  propD: {
      'propD-1': 'sub'
      'propD-2': 'sub'
  }
}

output arrayLength int = length(arrayToTest)
output stringLength int = length(stringToTest)
output objectLength int = length(objectToTest)

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
arrayLength Int 3
stringLength Int 13
objectLength Int 4

objectKeys

objectKeys(object)

إرجاع المفاتيح من كائن، حيث يكون العنصر عبارة عن مجموعة من أزواج قيم المفاتيح.

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
كائن ‏‏نعم‬ كائن الكائن، وهو مجموعة من أزواج قيم المفاتيح.

قيمة الإرجاع

صفيف.

مثال

يوضح المثال التالي كيفية استخدام objectKeys مع كائن:

var obj = { a: 1, b: 2 }

output keyArray array = objectKeys(obj)

المخرجات من المثال السابق هي:

Name نوع القيمة‬
keyArray صفيف [ "a", "b" ]

يقوم keyArray بإرجاع قائمة بالمفاتيح الخاصة بعنصر الإدخال.

في JSON، العنصر هو مجموعة غير مرتبة من أزواج صفرية أو أكبر من المفاتيح/القيم. يمكن أن يكون الترتيب مختلفًا اعتمادًا على عمليات التنفيذ. على سبيل المثال، تقوم دالة Bicep items() بفرز العناصر بالترتيب الأبجدي. في أماكن أخرى، يمكن الاحتفاظ بالترتيب الأصلي. وبسبب هذا عدم الحتمية، تجنب وضع أي افتراضات حول ترتيب مفاتيح الكائنات عند كتابة التعليمات البرمجية، والتي تتفاعل مع معلمات التوزيع والمخرجات.

سطح ضحلة

shallowMerge(inputArray)

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

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
inputArray ‏‏نعم‬ صفيف صفيف من الكائنات.

قيمة الإرجاع

كائن.

مثال

يوضح المثال التالي كيفية استخدام shallowMerge:

var firstArray = [{ one: 'a' }, { two: 'b' }, { two: 'c'}]
var secondArray = [{ one: 'a', nested: {a: 1, nested: {c: 3}} }, { two: 'b', nested: {b: 2}}]

output firstOutput object = shallowMerge(firstArray)
output secondOutput object = shallowMerge(secondArray)

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
الإخراج الأول كائن {"one":"a","two":"c"}
الإخراج الثاني كائن {"one":"a","nested":{"b":2},"two":"b"}

يعرض firstOutput الخصائص من دمج الكائنات المدمجة في كائن جديد. إذا كانت هناك خصائص متعارضة (أي الخصائص التي تحمل نفس الاسم)، فإن الخاصية من العنصر الأخير الذي يتم دمجه عادة ما تكون لها الأسبقية.

يظهر secondOutput أن الدمج الضحل لا يدمج هذه الكائنات المتداخلة بشكل متكرر. بدلا من ذلك، يتم استبدال الكائن المتداخل بأكمله بالخاصية المقابلة من الكائن الدمج.

union

union(arg1, arg2, arg3, ...)

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

مساحة الاسم: sys.

المعلمات

المعلمة‬ المطلوب نوع ‏‏الوصف
arg1 ‏‏نعم‬ صفيف أو عنصر القيمة الأولى المستخدمة في الانضمام إلى العناصر.
arg2 ‏‏نعم‬ صفيف أو عنصر القيمة الثانية لاستخدامها لضم العناصر.
وسائط إضافية لا صفيف أو عنصر المزيد من القيم المستخدمة في الانضمام إلى العناصر.

قيمة الإرجاع

صفيف أو عنصر.

الملاحظات

تستخدم الدالة union تسلسل المعلمات لتحديد ترتيب النتيجة وقيمها.

بالنسبة للصفائف، تتكرر الدالة خلال كل عنصر في المعلمة الأولى وتضيفها إلى النتيجة إذا لم تكن موجودة بالفعل. ثم يكرر العملية للمعلمة الثانية وأي معلمات أخرى. إذا كانت القيمة موجودة بالفعل، فسيتم الاحتفاظ بوضعها السابق في الصفيف.

بالنسبة للعناصر، تُضاف أسماء الخصائص والقيم من المعلمة الأولى إلى النتيجة. بالنسبة للمعلمات اللاحقة، تُضاف أية أسماء جديدة إلى النتيجة. إذا كان لدى معلمة لاحقة خاصية تحمل الاسم نفسه، فستحل هذه القيمة محل القيمة الموجودة. ترتيب الخصائص غير مضمون.

لا تدمج الدالة الموحدة عناصر المستوى الأعلى فحسب، بل تدمج أيضا بشكل متكرر أي كائنات متداخلة داخلها. لا يتم دمج قيم الصفيف المتداخلة. راجع المثال الثاني في القسم التالي.

مثال

يوضح المثال التالي كيفية استخدام union مع الصفائف والكائنات:

param firstObject object = {
  one: 'a'
  two: 'b'
  three: 'c1'
}

param secondObject object = {
  three: 'c2'
  four: 'd'
  five: 'e'
}

param firstArray array = [
  'one'
  'two'
  'three'
]

param secondArray array = [
  'three'
  'four'
  'two'
]

output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)

الناتج من المثال السابق مع القيم الافتراضية هو:

Name نوع القيمة‬
objectOutput ‏‏الكائن {"one": "a", "two": "b", "three": "c2", "four": "d", "five": "e"}
arrayOutput صفيف ["واحد، إثنان، ثلاثة، أربعة"]

يوضح المثال التالي إمكانية الدمج العميق:

var firstObject = {
  property: {
    one: 'a'
    two: 'b'
    three: 'c1'
  }
  nestedArray: [
    1
    2
  ]
}
var secondObject = {
  property: {
    three: 'c2'
    four: 'd'
    five: 'e'
  }
  nestedArray: [
    3
    4
  ]
}
var firstArray = [
  [
    'one'
    'two'
  ]
  [
    'three'
  ]
]
var secondArray = [
  [
    'three'
  ]
  [
    'four'
    'two'
  ]
]

output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)

المخرجات من المثال السابق هي:

Name نوع القيمة‬
objectOutput ‏‏الكائن {"property":{"one":"a","two":"b","three":"c2","four":"d","five":"e"},"nestedArray":[3,4]}
arrayOutput صفيف [["one","two"],["three"],["four","two"]]

إذا تم دمج الصفائف المتداخلة، فستكون قيمة objectOutput.nestedArray [1, 2, 3, 4]، وستكون قيمة arrayOutput [["one", "two", "three"], ["three", "four", "two"]].

الخطوات التالية